Enum, Hashcode et tests JUnit
Bonjour à tous,
Je me permets de vous contacter parce que je suis assez perplexe quant à mes tests Junit...
Dans ma classe Toto, voici ce que l'on peut trouver :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| public class CodeOperationYYY extends BaseBean {
private static final long serialVersionUID = 1L;
private Long id;
private int version;
public String codeOperation;
public String libelleOperation;
public NatureOperation natureOperation;
public Long getId() {
return id;
}
public void setId( Long id ) {
this.id = id;
}
public int getVersion() {
return version;
}
public void setVersion( int version ) {
this.version = version;
}
public String getCodeOperation() {
return codeOperation;
}
public void setCodeOperation( String codeOperation ) {
this.codeOperation = codeOperation;
}
public String getLibelleOperation() {
return libelleOperation;
}
public void setLibelleOperation( String libelleOperation ) {
this.libelleOperation = libelleOperation;
}
public NatureOperation getNatureOperation() {
return natureOperation;
}
public void setNatureOperation( NatureOperation natureOperation ) {
this.natureOperation = natureOperation;
}
public CodeOperationYYY () {
super();
}
public CodeOperationYYY ( String codeOperation, String libelleOperation, NatureOperation natureOperation ) {
super();
this.codeOperation = codeOperation;
this.libelleOperation = libelleOperation;
this.natureOperation = natureOperation;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codeOperation == null) ? 0 : codeOperation.hashCode());
result = prime * result + ((libelleOperation == null) ? 0 : libelleOperation.hashCode());
result = prime * result + ((natureOperation == null) ? 0 : natureOperation.hashCode());
return result;
}
@Override
public boolean equals( Object obj ) {
if (this == obj) return true;
if (obj == null) return false;
if (!(obj instanceof CodeOperation)) return false;
final CodeOperation other = (CodeOperation) obj;
if (codeOperation == null) {
if (other.codeOperation != null) return false;
} else
if (!codeOperation.equals( other.codeOperation )) return false;
if (libelleOperation == null) {
if (other.libelleOperation != null) return false;
} else
if (!libelleOperation.equals( other.libelleOperation )) return false;
if (natureOperation == null) {
if (other.natureOperation != null) return false;
} else
if (!natureOperation.equals( other.natureOperation )) return false;
return true;
}
public String getCodeOperetLibelle() {
String lesdeux = getCodeOperation().concat( " " ).concat( getLibelleOperation() );
return lesdeux;
}
} |
J'essaie de tester mon bean avec Junit avec la méthode testEquals fournie dans mon framework, en utilisant le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class CodeOperationYYYTest extends TestCase
{
public void testEquals()
{
final CodeOperationYYY a = new CodeOperationYYY ("22", "Virement particulier" ,NatureOperation.OPE_PRESENTATION ); // objet a - objet de référence"
final CodeOperationYYY b = new CodeOperationYYY ("22", "Virement particulier" ,NatureOperation.OPE_PRESENTATION ); // b identique à a
final CodeOperationYYY c = new CodeOperationYYY ("16", "Rejet d'AOCT (débit)" ,NatureOperation.OPE_REJET); // c différent de a
final CodeOperationYYY d = new CodeOperationYYY ("22", "Virement particulier" ,NatureOperation.OPE_PRESENTATION)
// d identique à a mais instance d'une sous-classe de celle de a
{
private static final long serialVersionUID = 1L;
};
new EqualsTester( a, b, c, d );
}
} |
Je précise que NatureOperation est une énumération....
JUnit me plante avec la trace suivante :
junit.framework.AssertionFailedError: a.equals(d)
at junit.framework.Assert.fail(Assert.java:47)
at com.gargoylesoftware.base.testing.EqualsTester.assertClassAndSubclass(EqualsTester.java:163)
at com.gargoylesoftware.base.testing.EqualsTester.<init>(EqualsTester.java:132)
at fr.gouv.finances.cp.psx.test.dev.bean.CodeOperationYYYTest.testEquals(TotoTest.java:21)
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:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
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:120)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
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)
Auriez-vous une idée de la raison du plantage, sachant que cette mécanique fonctionne parfaitement pour d'autres beans, ou si je modifie la valeur NatureOperation.OPE_PRESENTATION de mon objet d?
D'avance, merci!
GroToTo