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é