Class EqualsTester
- java.lang.Object
-
- junit.framework.Assert
-
- com.gargoylesoftware.base.testing.EqualsTester
-
public class EqualsTester extends junit.framework.AssertEqualsTester is used to test the equals contract on objects. The contract as specified by java.lang.Object states that if A.equals(B) is true then B.equals(A) is also true. It also specifies that if A.equals(B) is true then A.hashCode() will equals B.hashCode().It is also common practice to implement equals using an instanceof check which will result in false positives in some cases. Specifically, it will result in false positives when comparing against a subclass with the same values. For an in-depth discussion of the common problems when implementing the equals contract, refer to the book "Practical Java" by Peter Haggar
// WRONG way of implementing equals public boolean equals( final Object object ) { if( object instanceof this ) { // do check } return false; }The correct way to implement equals is as followspublic boolean equals( final Object object ) { if( object != null && object.getClass() == this.getClass() ) { // do check } return false; }EqualsTester ensures that the equals() and hashCode() methods have been implemented correctly.final Object a = new Foo(4); // original object final Object b = new Foo(4); // another object that has the same values as the original final Object c = new Foo(5); // another object with different values final Object d = new Foo(4) {}; // a subclass of Foo with the same values as the original new EqualsTester(a, b, c, d);- Version:
- $Revision: 1.4 $
-
-
Constructor Summary
Constructors Constructor Description EqualsTester(java.lang.Object a, java.lang.Object b, java.lang.Object c, java.lang.Object d)Perform the test.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidassertAEqualsA(java.lang.Object a)private voidassertAEqualsB(java.lang.Object a, java.lang.Object b)private voidassertAEqualsNull(java.lang.Object a)private voidassertANotEqualC(java.lang.Object a, java.lang.Object c)private voidassertCAllowedToBeNull(java.lang.Class clazz)C may not be null if it has a public non-default constructor or any setXX() methodsprivate voidassertClassAndSubclass(java.lang.Object a, java.lang.Object d)private voidassertDDifferentClassThanA(java.lang.Object a, java.lang.Object d)private voidassertNotNull(java.lang.Object object, java.lang.String description)private voidassertNull(java.lang.Object object, java.lang.String description)private voidassertSameClassAsA(java.lang.Object a, java.lang.Object object, java.lang.String name)private booleanisClassFinal(java.lang.Class clazz)-
Methods inherited from class junit.framework.Assert
assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
-
-
-
-
Constructor Detail
-
EqualsTester
public EqualsTester(java.lang.Object a, java.lang.Object b, java.lang.Object c, java.lang.Object d)Perform the test. The act of instantiating one of these will run the test.- Parameters:
a- The object to be testedb- An object that is equal to Ac- An object of the same class that is not equal to A. If it is not possible to create a different one then pass null.d- A subclass of A with the same values. If A is an instance of a final class then this must be null
-
-
Method Detail
-
isClassFinal
private boolean isClassFinal(java.lang.Class clazz)
-
assertAEqualsA
private void assertAEqualsA(java.lang.Object a)
-
assertAEqualsB
private void assertAEqualsB(java.lang.Object a, java.lang.Object b)
-
assertANotEqualC
private void assertANotEqualC(java.lang.Object a, java.lang.Object c)
-
assertClassAndSubclass
private void assertClassAndSubclass(java.lang.Object a, java.lang.Object d)
-
assertNotNull
private void assertNotNull(java.lang.Object object, java.lang.String description)
-
assertNull
private void assertNull(java.lang.Object object, java.lang.String description)
-
assertCAllowedToBeNull
private void assertCAllowedToBeNull(java.lang.Class clazz)
C may not be null if it has a public non-default constructor or any setXX() methods- Parameters:
clazz-
-
assertSameClassAsA
private void assertSameClassAsA(java.lang.Object a, java.lang.Object object, java.lang.String name)
-
assertDDifferentClassThanA
private void assertDDifferentClassThanA(java.lang.Object a, java.lang.Object d)
-
assertAEqualsNull
private void assertAEqualsNull(java.lang.Object a)
-
-