jUnit und Test von equals, hashCode, toString

fastjack

Top Contributor
Hallo,

ich wollte mal fragen, wie ihr die von Object-überladenden Methoden hashCode(), equals() und toString() vernünftig in jUnit testet. toString() ist ja noch relativ harmlos, aber equals und hashCode bei Objekten mit mehreren Attributen hat es glaube ich sehr in sich, wenn man wirklich komplett (nach Coverage) testen will. Vielleicht bin ich auch auf dem Holzweg ...

Danke.
 

@x.l

Bekanntes Mitglied
Ich mach mir eigentlich nicht die Mühe equals und hashCode zu testen, da ich mir diese von der IDE erzeugen lasse und darauf vertraue, dass es funktioniert.
 

mvitz

Top Contributor
equals geht und hashcode kann man dann insofern testen, dass bei Objekten für die equals == true gilt, auch hashCode == hashCode ist.
 

FArt

Top Contributor
equals geht und hashcode kann man dann insofern testen, dass bei Objekten für die equals == true gilt, auch hashCode == hashCode ist.

Und mit welchem Effekt?
Wenn ein Objekt x Attribute für equals und hashCode heranzieht und y Attribute nicht, wie viele verschiedene Objekte (mit variierenden Attributen alle Kombinationen) muss ich dann im Test erzeugen und überprüfen um das wirklich validieren zu können? Und was habe ich mit diesem Aufwand dann gewonnen?

Ich bin ja auch für Unittests, aber man sollte doch die Kirche im Dorf lassen und nicht päpstlicher sein als der Papst.
 

mvitz

Top Contributor
Hab ja nicht gesagt, dass es Sinnvoll ist ;) Denke bei Objekten mit wenig Attributen, oder wo es Spezialfälle gibt könnte das ganze Sinnvoll sein.

Ansonsten kann man sich entweder auf die Generierung durch die IDE verlassen, oder eine Bibliothek wie z.B. commons-lang benutzen.
 
B

bygones

Gast
equals geht und hashcode kann man dann insofern testen, dass bei Objekten für die equals == true gilt, auch hashCode == hashCode ist.
halte ich für fragwürdig zu testen ... toString so und so... warum will man die String reprästenation eines objektes testen ?
hashcode
Java:
public int hashCode {
   return 42;
}
ist eine valide hashcode funktion - und zeigt die Fragwürdigkeit eines Testes.

bei equals fällt mir grad kein gegenbeispiel ein, aber auch hier würde ich nicht junit tests schreiben.

Dir scheint es um die Coverage zu gehen... pur auf diese Zahl zu achten ist unsinnig. Eine Coverage von 100% klingt für jeden Projektleiter / Kunden super, sagt aber nix aus, ob die Tests auch sinnvoll sind. Es zeigt mehr dass auch alle setter und getter getestet werden, was ebenso unsinnig ist...
 
Zuletzt bearbeitet von einem Moderator:

fastjack

Top Contributor
@all Danke für Eure Meinungen.

Ich finde die Korrektheit der equals() und hashCode() Methoden schon sehr wichtig, da sie in der Collection-API an allen Ecken und Enden verwendet werden. Ich erzeuge diese Methoden auch mit einer IDE (das bedeutet aber nicht, das ich Ihr 100%ig vertraue). Nur gab es in letzter Zeit häufiger das Problem, das Entwickler die Methoden, vorsichtig gesagt "verbessert" hatten, und ohne es zu Wissen den Equals-Kontrakt der Java-API (nachzulesen bei Object) verletzt hatten. Bis Fehler im Produktionssystem, die daraus entstanden sind gefunden wurden, sind Wochen vergangen. Beim Testen von toString() bin ich mir noch nicht so ganz sicher.

@vitz hat Recht, ein Punkt ist u.a. x.equals(y)==true dann muß hashCode(x) == hashCode(y) sein

@Fart ich dachte es gäbe eine Möglichkeit, den Aufwand gering zu halten. Aufgrund des obigen Fehlers denke ich aber heute, das er sich trotzdem lohnt.

@bygones dein hashCode ist natürlich völlig korrekt. der Kontrakt sagt ja auch nur was vitz erwähnte. Mit der Coverage gebe ich Dir recht, man kann auch Tests schreiben, die jede Codezeile covern aber überhaupt nichts testen ;) Trotzdem denke ich, es nutzt, wenn es im Betrieb viele Entwickler gibt, die ständig irgendwo rumfummeln. Getter und Setter zu testen halte ich auch für unsinnig, da sie im Normalfall in anderen Testmethode der Klasse sowieso benutzt werden.

Schönen Feierband an Alle.
 

FArt

Top Contributor
Ich erzeuge diese Methoden auch mit einer IDE (das bedeutet aber nicht, das ich Ihr 100%ig vertraue). Nur gab es in letzter Zeit häufiger das Problem, das Entwickler die Methoden, vorsichtig gesagt "verbessert" hatten, und ohne es zu Wissen den Equals-Kontrakt der Java-API (nachzulesen bei Object) verletzt hatten.
Wieso soll man ihr nicht vertrauen? Man sieht sich einmal an, wie diese generiert wird, bewertet das und fertig. Und natürlich ist es in der Verantwortung des Entwicklers die passenden Attribute auszuwählen. Und für die, die nicht wissen was sie tun, gibt es immer noch Codereviews.
 

fastjack

Top Contributor
In Sachen IDE und Autogenerierungen habe ich eine gesunde Portion Skepsis. Es ist hilfereich, ohne Zweifel, allerdings entartet das auch meistens schnell in "blindem" Generieren. Solange bis jemand auf die Idee kommt die Templates zu "verbessern", was durchaus auch durch IDE Update passieren könnte.

Und für die, die nicht wissen was sie tun, gibt es immer noch Codereviews.
Wenn das mal in allen Firmen so wäre... Ich war in vielen kleinen Firmen, bei denen das schon meistens aus Kostengründen nicht Gang und Gebe war und dann hilft halt nur eins: Vertrauen ist gut, Kontrolle(Test) ist besser.
 
B

bygones

Gast
Wenn das mal in allen Firmen so wäre... Ich war in vielen kleinen Firmen, bei denen das schon meistens aus Kostengründen nicht Gang und Gebe war und dann hilft halt nur eins: Vertrauen ist gut, Kontrolle(Test) ist besser.
solange es in den Köpfen der Entscheider liegt dass Reviews und QS Verschwendung von Resourcen sind wirst du auch nicht bzgl testen weiter kommen. Warum sollte man Testen akzeptieren, aber Reviews als Verschwendung sehen ?
Mich wunderts immer wieder wie verbohrte Firmen es immer noch nicht gibt, die wirklich meinen diese Prozesse sind unsinn
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
B Junit Test Allgemeine Java-Themen 8
J Junit surefire: enrich test information Allgemeine Java-Themen 0
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
E JUnit wie Testergebnisse pro Test ("Test Report") erhalten? Allgemeine Java-Themen 1
M JUnit Test Suites Allgemeine Java-Themen 2
B Hilfe bei JUnit Test Allgemeine Java-Themen 1
P Klassen Junit test funktioniert nicht... Allgemeine Java-Themen 11
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
J JUnit, TestCase vs "einfacher" Test Allgemeine Java-Themen 3
1 JUnit Test Suit Allgemeine Java-Themen 2
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
D junit - frage zu fixtures/test suites Allgemeine Java-Themen 11
G JUnit Test Allgemeine Java-Themen 5
N ClassNotFound Exception bei JUnit Test? Allgemeine Java-Themen 2
GilbertGrape Warum schlägt JUnit-Test fehl? Allgemeine Java-Themen 19
K Bekomme JUnit TEst nicht zum laufen :( Allgemeine Java-Themen 9
B JUnit - Gleichen Test x-mal durchlaufen Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
J Junit start surefire for manual testing Allgemeine Java-Themen 1
P No JUnit tests found Allgemeine Java-Themen 5
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
K Input/Output JUnit: Log Inhalte, falsche Assertion Allgemeine Java-Themen 2
H OOP Testen einer Exception mit JUnit Allgemeine Java-Themen 8
AssELAss Junit-Tests für SQL-Veribindung sowie SQL-Queries? Allgemeine Java-Themen 3
O Maven - JUnit - H2 Allgemeine Java-Themen 1
M Selenium JUnit Tests (Auswahl von Testmethoden auswerten) Allgemeine Java-Themen 5
C JUNIT - ANT - build.xml Allgemeine Java-Themen 0
Airwolf89 JUnit: Vorschläge/ Best Practice Allgemeine Java-Themen 7
M JUnit Serverseitig? Wie geht sowas? Allgemeine Java-Themen 2
B JUnit Zufalls Operation testen Allgemeine Java-Themen 1
P JUnit Allgemeine Java-Themen 2
B jUnit 4: Wie protokolliert man Testergebnisse? Allgemeine Java-Themen 1
H JUnit Fehler beim Compilieren - erledigt Allgemeine Java-Themen 0
L JUnit - automatisiertes vs. manuelles Testen? Allgemeine Java-Themen 6
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
A JUnit/Hashcode Problem Allgemeine Java-Themen 5
X Problem mit URLClassLoader und JUnit Allgemeine Java-Themen 3
N JUnit Allgemeine Java-Themen 13
M Junit Tests durchführen Allgemeine Java-Themen 18
M JVM Probleme JUnit Allgemeine Java-Themen 2
G NUnit Features in JUnit Allgemeine Java-Themen 2
darekkay (JUnit) Testdaten generieren - Framework? Allgemeine Java-Themen 2
A JUnit problem Allgemeine Java-Themen 9
T Organisation von Junit Testfällen? Allgemeine Java-Themen 2
M JUnit Tests vs. DBUnit Tests Allgemeine Java-Themen 3
S Die Zeile die JUnit gerade ausführt lesen Allgemeine Java-Themen 15
aze JUnit: Testen ob bestimmte Exception nicht auftritt Allgemeine Java-Themen 18
U Fehler: Hauptklasse org.junit.runner.JUnitCore konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 2
J JUnit-Tests Zeichensatzproblem ? Allgemeine Java-Themen 2
S [JUnit] Name von TestCase bekommen Allgemeine Java-Themen 4
T Junit-Tests in Java Klasse ausführen Allgemeine Java-Themen 26
J JUnit - werfen von Exceptions testen Allgemeine Java-Themen 17
M JUnit TestSuite erstellen Allgemeine Java-Themen 2
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
G Testcases mit Junit auf private-Methode Allgemeine Java-Themen 7
C JUnit und das Zulassen von RuntimeExceptions Allgemeine Java-Themen 5
ruutaiokwu junit mit annotations geht nicht? Allgemeine Java-Themen 5
T JUnit-Log auslesen Allgemeine Java-Themen 13
C JUnit Tests Allgemeine Java-Themen 4
fastjack JUnit Supplementary Classes Allgemeine Java-Themen 4
O Junit Reports / Logs als XML ohne Maven/Ant Allgemeine Java-Themen 7
M Junit und Mocks Allgemeine Java-Themen 5
A Seltsames Verhalten von JUnit-Tests im Zusammenspiel mit Ant Allgemeine Java-Themen 6
S JUnit: Erzeugen einer IOException Allgemeine Java-Themen 9
G JUnit Tests Allgemeine Java-Themen 7
S JUnit - was mocken, was nicht? Allgemeine Java-Themen 3
S JUnit TesSuite und @Repeat Allgemeine Java-Themen 2
S JUnit Tests für GUI / Oberflächen Allgemeine Java-Themen 2
M Junit und Mocks bei JDBC Daos Allgemeine Java-Themen 8
M JUnit Problem mit AssertionFailedError Allgemeine Java-Themen 2
B Testfälle mit JUnit Allgemeine Java-Themen 4
S JUnit Allgemeine Java-Themen 15
G ANT Tutorial . Schritte bzgl. Junit Bibliothek Allgemeine Java-Themen 4
A JUnit Reports zu groß für XSLT Allgemeine Java-Themen 4
M JUnit und dynamische Tests Allgemeine Java-Themen 11
P JUnit unter Eclipse: Problem mit Exception Allgemeine Java-Themen 8
K Junit: Frage zum Ablauf Allgemeine Java-Themen 3
K JUnit: Tests über ant aufrufen Allgemeine Java-Themen 2
S JUnit und EasyMock Allgemeine Java-Themen 7
B Wie alt ist JUnit? Allgemeine Java-Themen 2
A Junit Exceptions testen Allgemeine Java-Themen 3
P Testen mit JUnit Allgemeine Java-Themen 8
7 JUnit: Testproblem. Allgemeine Java-Themen 23
G Ant + JUnit Allgemeine Java-Themen 2
F JUnit unter Ant Allgemeine Java-Themen 3
S Integer zu int konvertieren - JUnit Allgemeine Java-Themen 12
G testen mit JUnit? Allgemeine Java-Themen 3
K JUnit 4 User Interaktion Allgemeine Java-Themen 7
M Ant + Junit + Testclass in Jar Allgemeine Java-Themen 3
G Junit 4 - TestSuite Allgemeine Java-Themen 6
B JUnit Allgemeine Java-Themen 2
T CheckStyle, JUnit und FindBugs aus Java-Programm starten Allgemeine Java-Themen 2
S JUnit will ins Netz! Allgemeine Java-Themen 2
F Hilfe: Adjazenzmatrix mittels JUnit testen. Allgemeine Java-Themen 2
H JUnit Allgemeine Java-Themen 5
N Problem mit Ant und JUnit Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben