Problemas com o AssertEquals em testes unitários

0 respostas
afabbro

Pessoal, estou tendo problemas com o assertEquals nas minhas classes de testes, não sei o que pode estar acontecendo, pois comparo os objetos e estão iguais, mas o assertEquals diz que são diferentes…!
Minha estratégia é apenas comparar um objeto em runtime com outro da base para que o teste passe, por exemplo minha classe:

import java.io.Serializable;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

public class Prestador implements Serializable {
 
	private Long id;
	 
	private String nome;
	 
	private String cpf;
	 
	private String cnpj;
	 
	private String rg;
	 
	private Endereco endereco;
	 
	private ContaBancaria conta;
	 
	private String idFuncional;
	 
	private String inss;
	 
	private String pis;
	 
	private String pasep;

	/**
	 * ... todos os meus gets e sets estão aqui...
	 */
	

	/**
	 * @see java.lang.Object#equals(Object)
	 */
	public boolean equals(Object object) {
		if (!(object instanceof Prestador)) {
			return false;
		}
		Prestador rhs = (Prestador) object;
		return new EqualsBuilder().appendSuper(super.equals(object)).append(
				this.rg, rhs.rg).append(this.cnpj, rhs.cnpj).append(this.nome,
				rhs.nome).append(this.conta, rhs.conta).append(this.pasep,
				rhs.pasep).append(this.idFuncional, rhs.idFuncional).append(
				this.inss, rhs.inss).append(this.pis, rhs.pis).append(
				this.endereco, rhs.endereco).append(this.cpf, rhs.cpf).append(
				this.id, rhs.id).isEquals();
	}

	/**
	 * @see java.lang.Object#hashCode()
	 */
	public int hashCode() {
		return new HashCodeBuilder[telefone removido], 119119943).appendSuper(
				super.hashCode()).append(this.rg).append(this.cnpj).append(
				this.nome).append(this.conta).append(this.pasep).append(
				this.idFuncional).append(this.inss).append(this.pis).append(
				this.endereco).append(this.cpf).append(this.id).toHashCode();
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return new ToStringBuilder(this).append("nome", this.nome).append(
				"cpf", this.cpf).append("id", this.id)
				.append("inss", this.inss).append("endereco", this.endereco)
				.append("conta", this.conta).append("cnpj", this.cnpj).append(
						"idFuncional", this.idFuncional).append("pasep",
						this.pasep).append("pis", this.pis).append("rg",
						this.rg).toString();
	}
	
	 
}

… e nas classes testes eu faço da seguinte forma:

import java.sql.Connection;
import java.sql.DriverManager;

import org.dbunit.DatabaseTestCase;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.ext.mssql.InsertIdentityOperation;
import org.dbunit.operation.DatabaseOperation;

public class BaseServiceTest extends DatabaseTestCase {
	
	private static String DB_URL = "jdbc:jtds:sqlserver://localhost:1433/fundePag;SelectMethod=cursor";	
	private static String DB_USER_NAME = "username";
	private static String DB_PASSWORD = "password";
	
	static {
		
		try {
			Class.forName("net.sourceforge.jtds.jdbc.Driver");
		} catch (Exception e) {
			System.out.println("Erro ao carregar driver do mysql");
			e.printStackTrace();
		}
	}

	public BaseServiceTest() {
		super();

	}

	public BaseServiceTest(String arg0) {
		super(arg0);

	}

	/** 
	 * @see org.dbunit.DatabaseTestCase#getConnection()
	 */
	protected IDatabaseConnection getConnection() throws Exception {
		
		Connection conn = null;

		conn = DriverManager.getConnection(DB_URL, DB_USER_NAME, DB_PASSWORD);
		
		return new DatabaseConnection(conn);
	}
	
	/* (non-Javadoc)
	 * @see org.dbunit.DatabaseTestCase#getDataSet()
	 */
	@Override
	protected IDataSet getDataSet() throws Exception {
		
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.dbunit.DatabaseTestCase#getSetUpOperation()
	 */
	protected DatabaseOperation getSetUpOperation() throws Exception {
		
		try {
			return new InsertIdentityOperation(DatabaseOperation.REFRESH).REFRESH;
		} catch (Exception e) {
			e.printStackTrace();
		}
		//		return DatabaseOperation.INSERT;
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.dbunit.DatabaseTestCase#getTearDownOperation()
	 */
	protected DatabaseOperation getTearDownOperation() throws Exception {
		
		return DatabaseOperation.NONE;
	}	


}


public class HelperTests {
	
	
	public static Prestador getPrestadorTeste() {
		
		Prestador prestador = new Prestador();
		Endereco endereco = new Endereco();
		ContaBancaria conta = new ContaBancaria();
		
		prestador.setId(new Long("15"));
		prestador.setNome("Fulano da Silva Moreira");
		prestador.setCnpj("03606303000140");
		prestador.setCpf("[telefone removido]");
		prestador.setRg("241992336");
		prestador.setPis("[telefone removido]");
		prestador.setPasep("[telefone removido]");
		prestador.setIdFuncional("[telefone removido]");
		prestador.setInss("[telefone removido]");
		
		endereco.setLogradouro("Rua Pres Bernardes 409");
		endereco.setBairro("Jardim Flamboyant");
		endereco.setCep("13091160");
		endereco.setCidade("Campinas");
		endereco.setEstado("SP");
		
		conta.setBanco("001");
		conta.setAgencia("1397");
		conta.setContaCorr("23.938-0");
		
		prestador.setEndereco(endereco);
		prestador.setConta(conta);
		
		return prestador;
		
	}

A classe abaixo é a que estou tendo o problema do equals, no método testGetById()

import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;

import br.com.fundepag.business.service.ServiceFactory;
import br.com.fundepag.prestador.model.Prestador;
import br.com.fundepag.test.BaseServiceTest;
import br.com.fundepag.test.HelperTests;

public class PrestadorServiceTest extends BaseServiceTest {
	
	
	protected IDataSet getDataSet() throws Exception {
		
		return new FlatXmlDataSet(this.getClass().getResourceAsStream("PrestadorDataset.xml")	);
	}
	
	
	public void testGetById() {
		
		//constroi um prestador igual ao que está na base
		Prestador prestadorRT = HelperTests.getPrestadorTeste();
		
		//recupera o prestador da base
		Prestador prestadorDB = ServiceFactory.getPrestadorService().getById(new Long("15"));
		
		//compara os dois - aqui é que está o problema..!!
		assertEquals("Prestadores diferentes", prestadorDB, prestadorRT);
		
	}
	
	

}

O erro que ocorre é o seguinte:

junit.framework.AssertionFailedError: Prestadores diferentes expected:<br.com.fundepag.prestador.model.Prestador@c8376b[nome=Fulano da Silva Moreira,cpf=[telefone removido],id=15,inss=[telefone removido],endereco=br.com.fundepag.prestador.model.Endereco@7bc899[cidade=Campinas,estado=SP,cep=13091160,bairro=Jardim Flamboyant,logradouro=Rua Pres Bernardes 409],conta=br.com.fundepag.prestador.model.ContaBancaria@aeea66[banco=001,contaCorr=23.938-0,agencia=1397],cnpj=03606303000140,idFuncional=[telefone removido],pasep=[telefone removido],pis=[telefone removido],rg=241992336 ]> but was:<br.com.fundepag.prestador.model.Prestador@19eda2c[nome=Fulano da Silva Moreira,cpf=[telefone removido],id=15,inss=[telefone removido],endereco=br.com.fundepag.prestador.model.Endereco@59a34[cidade=Campinas,estado=SP,cep=13091160,bairro=Jardim Flamboyant,logradouro=Rua Pres Bernardes 409],conta=br.com.fundepag.prestador.model.ContaBancaria@1cef4f7[banco=001,contaCorr=23.938-0,agencia=1397],cnpj=03606303000140,idFuncional=[telefone removido],pasep=[telefone removido],pis=[telefone removido],rg=241992336]>
	at junit.framework.Assert.fail(Assert.java:47)
	at junit.framework.Assert.failNotEquals(Assert.java:285)
	at junit.framework.Assert.assertEquals(Assert.java:64)
	at br.com.fundepag.prestador.service.PrestadorServiceTest.testGetById(PrestadorServiceTest.java:35)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at junit.framework.TestCase.runBare(TestCase.java:127)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

Eu comparo os dois objetos e são exatamente iguais!! Por favor, se alguém já passou por esse mesmo problema ou tiver uma idéia do que pode ser, por favor me ajude…!

André

Criado 8 de agosto de 2006
Respostas 0
Participantes 1