Potřeboval jsem otestovat správnost metod equals, hashCode a zejména compareTo, protože jsem si nebyl jist, jestli implementace pro životně důležitou třídu v projektu, na kterém pracuji, bude bez chyb. Je pátek, venku sluníčko, to by nemuselo dopadnout dobře. Z literatury vím, že metoda compareTo musí splňovat jisté podmínky, aby byla zajištěna správnost. Také musejí být implementovány (správně) metody equals a hashCode. Proto mě napadlo – co takhle si napsat nějaký obecný test, který by správnost implementací kontroloval. Mohl bych ho pak používat znovu a znovu! A pak mě napadlo – neřešil už tohle někdo?
Ano, řešil. Knihovna JUnit Addons obsahuje třídy ComparabilityTestCase a EqualsHashCodeTestCase, které dělají přesně to, co je potřeba. Ověří dané podmínky, které jsou definovány v dokumentačních kontraktech těchto metod. Pakliže jsou porušeny, koledujeme si totiž o veliký malér. Ukázka:
// bacha jen Java 1.5+ public class FileHolderCompareTest extends ComparabilityTestCase { public FileHolderCompareTest(String s) { super(s); } protected Comparable createLessInstance() throws Exception { return -1; } protected Comparable createEqualInstance() throws Exception { return 0; } protected Comparable createGreaterInstance() throws Exception { return 1; } }