Test na equals, hashCode a compareTo

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;
	}
}

Diskuze

If you can't read the letters on the image, download this .wav file to get them read to you.
pridej.cz
blog/test_na_equals_hashcode_a_compareto.txt · Poslední úprava: 29.05.2008 09:04 (external edit)
Creative Commons License Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0