Spring, JUnit test

3 respostas
Guilherme_Gomes

Pessoal,

Estou fazendo um teste de persistencia usando JPA e Spring, vou mostrar o código e depois comento o problema:

public class EstadoServiceIntegrationTests extends AbstractJpaTests {
	private EstadoService estadoservice;
	
	private Long spId;

	public void setEstadoservice(EstadoService estadoservice) {
		this.estadoservice = estadoservice;
	}
	
	protected String[] getConfigLocations() {
		return new String[] { "classpath:/br/com/ze/locais/dao/dwspring-service.xml" };
	}
	
	protected void onSetUpInTransaction() throws Exception{
		Estado estado1 = new Estado();
		estado1.setNome("São Paulo");
		estado1.setSigla("SP");
		
		Estado estado2 = new Estado();
		estado2.setNome("Rio de Janeiro");
		estado2.setSigla("RJ");

		estadoservice.save(estado1);
		estadoservice.save(estado2);
		
		estado1.setNome("Sao Paulo");
		estado1 = estadoservice.update(estado1);
		
		spId = estado1.getId();
	}
	
	public void testModifyEstado(){
		String oldName = "Rio de Janeiro";
		String newName = "Riu de Janeiro";
		List<Estado> list = estadoservice.findByNome(oldName);
		Estado est = list.get(0);
		est.setNome(newName);
		
		System.out.println("Alo: " + est.getId() + est.getNome() + est.getSigla());
		
		Estado est2 = estadoservice.update(est);
		assertEquals(newName, est2.getNome());
		System.out.println("Nome : " + est2.getNome());
		
		Estado e = new Estado();
		e.setNome("Nome");
		e.setSigla("SG");
		estadoservice.save(e);
		System.out.println(e.getId());
		e.setNome("NNNN");
		estadoservice.update(e);
	}
}

Tudo ocorre normalmente, mas olhando a saída:

Podemos perceber que estão faltando 2 updates, os dois estão em testModifyEstado. Os updates em onSetUpInTransaction ocorrem normalmente, enquanto na função test* não, alguem sabe me explicar por que?

Desde ja agradeço,

3 Respostas

papagaio

sobre esse pedaço de codigo

tenta isso

Guilherme_Gomes

O fato de sair tudo grudado ou separado por " " (espaço) não faz diferença, o fato é que ele recebe o est2 e diz que foi atualizado (recebendo do update), mostra "Riu de Janeiro", quando na verdade ele nunca atualizou no banco de dados.

Rio de Janeiro não muda para Riu de Janeiro, mas São Paulo muda para Sao Paulo…

Pode olhar na saída que os dois ultimos updates o hibernate não está logando…

Vou passar umas informações extras:

linha de update e save:

public Estado save(Estado estado) {
		getJpaTemplate().persist(estado);
		return estado;
	}

	public Estado update(Estado estado) {
		return getJpaTemplate().merge(estado);
	}
        //essa classe extende JpaDaoSupport

XML dwspring-service.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	
   <bean id="employeeService" class="br.com.ze.locais.dao.imp.EstadoDAO">
      <property name="entityManagerFactory" ref="entityManagerFactory"/>
   </bean>

   <bean id="entityManagerFactory" class=
   "org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource"/>
      <property name="jpaVendorAdapter">
         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true"/>
            <property name="generateDdl" value="false"/>
            <!--property name="databasePlatform" 
                    value="oracle.toplink.essentials.platform.database.HSQLPlatform"/-->
         </bean>
      </property>
      <property name="loadTimeWeaver">
         <bean class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/>
      </property>
   </bean>

   <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="***"/>
                    <property name="username" value="***" />
                    <property name="password" value="***" />
   </bean>

   <bean id="transactionManager" 
     class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactory"/>
      <property name="dataSource" ref="dataSource"/>
   </bean>
	
	
</beans>

resultado no MySQL:

Guilherme_Gomes

detalhe que nem o “Nome” é atualizado para “NNNN”

Alguem tem idéia de porque só na função test* não funciona o update? Sendo que o insert funciona e é logado pelo hibernate…

Criado 27 de novembro de 2007
Ultima resposta 27 de nov. de 2007
Respostas 3
Participantes 2