Warum schlägt JUnit-Test fehl?

Status
Nicht offen für weitere Antworten.

GilbertGrape

Bekanntes Mitglied
Hallo,

ich teste im Moment das persistieren einer meiner Klassen.

Dazu hab ich folgende Testmethode geschrieben:

Code:
public void testStoreRetrieve(){
		User user = new User("test");
		Long id = userDao.saveUser(user);
		
		User retrievedUser = userDao.getUser(id);
		assertEquals(user, retrievedUser);
		assertNotSame(user, retrievedUser);
	}

Ich hoffe, das reicht erstmal!
Denn das Problem ist, dass assertEquals fehl schlägt. Ich weiß nicht genau wie Equals hier vergleicht, aber ich hab im Debugger nachgeschaut und da sind die beiden Objekte für mich gleich. Das heißt, die id stimmt überein und der Name auch und die anderen Attribute sind null.
Ich kenn mich noch nicht besonders gut mit JUnit aus, aber ich hab schon ein bißchen was gelesen und so wurde es auch in einem Beispiel gemacht.
Vielleicht fällt jemandem was auf??

Gruß!
 
B

Beni

Gast
Es wird wohl "equals" aufgerufen, implementiert die Klasse "User" die Methode "boolean equals( Object )"?
 
M

maki

Gast
Wer equals() überschreibt, muss auch hashcode() überschreiben.
Ansonsten fällt mir auf, dass du keine Unittest sondern einen Integrationtest machst, oder täusche ich mich da?
 

GilbertGrape

Bekanntes Mitglied
maki hat gesagt.:
Wer equals() überschreibt, muss auch hashcode() überschreiben.
kann ich mir die Berechnung des neuen Hashcodes ausdenken??

maki hat gesagt.:
Ansonsten fällt mir auf, dass du keine Unittest sondern einen Integrationtest machst, oder täusche ich mich da?
Du meinst, weil ich UserDao und User teste? Kann sein, aber ich wüsste nicht wie ich das trennen sollte...
 
S

SlaterB

Gast
kannst theoretisch ausdenken, ja,

recht schlau wäre es, den Hashcode von den Dingen abhängig zu machen, die du auch in equals benutzt,
z.B. name.hashCode() + id
 

GilbertGrape

Bekanntes Mitglied
Alles klar.

Ich hatte nur irgendwo so eine Funktion gefunden und wusste nicht wo jetzt die Zahlen (also die 1000003) herkommen:

Code:
public int hashCode(){
return name.hashCode() * 1000003 + prename.hashCode();
}
 
M

maki

Gast
GG,

Bevor du deinen eigenen Murks fabrizierst:
in Eclipse
Rechtsklick auf die Source -> Source -> generate equals & hashcode

Dann nur noch die gewünschten Felder auswählen.
 

GilbertGrape

Bekanntes Mitglied
Zu spät! naja, auch nicht schlecht, das mal selbst zu machen. Fürs nächste Mal weiß ichs :) Bei mir sahs auch fast genauso aus, nur dass ich nicht diese Primzahl benutzt habe bei HashCode.
Wozu wird das gemacht? Um die Codes besser zu verteilen?
 
M

maki

Gast
GilbertGrape hat gesagt.:
Zu spät! naja, auch nicht schlecht, das mal selbst zu machen. Fürs nächste Mal weiß ichs :) Bei mir sahs auch fast genauso aus, nur dass ich nicht diese Primzahl benutzt habe bei HashCode.
Wozu wird das gemacht? Um die Codes besser zu verteilen?
Was du selbst gemacht hast, kannste wegwerfen ;)
Was machst du denn wenn name oder prename (Was soll das eigentlich sein? ;)) null ist?

Ist komplizierter als du denkst, lies dich mal rein, so schwer ist es zwar nicht, aber einfach mal so aus der Hüfte ist sicherlich nicht der beste Weg.

http://www.geocities.com/technofundo/tech/java/equalhash.html

Dazu kommt, dass equals und hashcode bei Identitätsobjetken anders implmentiert werden sollte als bei Wertobjekten.
 

GilbertGrape

Bekanntes Mitglied
Hehe, das Beispiel war aus dem Internet. Das hatte ich nur wegen dieser Zahl gepostet.
Bei mir hatte ich die null-Abfragen drin :)

Edit: Und bei mir heißen die firstName und lastName :)
 
M

maki

Gast
Na dann ;)

Andere Frage: Was passiert wenn zwei Benutzer denselben Namen haben?
 

GilbertGrape

Bekanntes Mitglied
das macht nix.
ich hab noch einen login, der soll unique sein. ich hab das einfach als UniqueConstraint hinzugefügt. nicht richtig?
 
M

maki

Gast
Prüfst du denn auf denn login in equals & hashcode, oder auf den Namen?
 
M

maki

Gast
Wenn du auf alles ausser ID prüfst, hast du Wertobjekte, sollten immutable sein.

Identitätsbjekte (= selbe Werte, trotzdem unterschiedliche Objekte) sind da anders, Wolfgang Meier zB. gibt es eben mehrere,
 
M

maki

Gast
Das ist eine Architekturfrage, Wertobjekte vs. Identitätsobjekte (Value objects vs identity objects), kannst ja mal googeln ;)

Da ich deine Architektur nicht kenne, kann ich die Frage nicht beantwroten, dachte aber das es gut wäre, wenn du zumindes wüsstest das es beide gibt.
 

GilbertGrape

Bekanntes Mitglied
Ja habs gegoogled, aber ich werd nicht so recht schlau draus. Muss ich nochmal überlegen.
Vielen Dank jedenfalls!
 
M

maki

Gast
Ist auch nicht ganz einfach, braucht Zeit um sich zu setzen, einfach mal vor dem einschlafen lesen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Regex schlägt nicht an Allgemeine Java-Themen 10
mrbig2017 Kapselung Methodenaufruf in DLL schlägt fehl! Allgemeine Java-Themen 1
C Entschlüsselung schlägt fehl Allgemeine Java-Themen 1
J Stringvergleich schlägt fehl Allgemeine Java-Themen 5
M Verbindung zu Webserver schlägt fehl Allgemeine Java-Themen 0
Thallius Serialisierung schlägt fehl. Allgemeine Java-Themen 3
P Kosinusberechnung schlägt fehl Allgemeine Java-Themen 5
B Reflection: getMethods schlägt fehl (NoClassDefFoundE)) Allgemeine Java-Themen 15
A mit .equals Array befüllen schlägt teilweise fehl Allgemeine Java-Themen 3
N Input/Output Vergleich von identischen Strings schlägt fehl Allgemeine Java-Themen 5
S mkdirs schlägt fehl Allgemeine Java-Themen 5
T Lesezugriff auf Consolenprogramm schlägt fehl Allgemeine Java-Themen 9
M Casten von Liste nach Array schlägt fehl?? Allgemeine Java-Themen 3
J Jar datei erstellen schlägt fehl Allgemeine Java-Themen 3
Q Rotation von Bildern schlägt fehl Allgemeine Java-Themen 8
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Junit Test Allgemeine Java-Themen 8
J Junit surefire: enrich test information Allgemeine Java-Themen 0
J Junit start surefire for manual testing Allgemeine Java-Themen 1
P No JUnit tests found Allgemeine Java-Themen 5
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
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
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
E JUnit wie Testergebnisse pro Test ("Test Report") erhalten? Allgemeine Java-Themen 1
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
M JUnit Test Suites Allgemeine Java-Themen 2
L JUnit - automatisiertes vs. manuelles Testen? Allgemeine Java-Themen 6
B Hilfe bei JUnit Test Allgemeine Java-Themen 1
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
P Klassen Junit test funktioniert nicht... Allgemeine Java-Themen 11
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
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
J JUnit-Tests Zeichensatzproblem ? Allgemeine Java-Themen 2
J JUnit, TestCase vs "einfacher" Test Allgemeine Java-Themen 3
S [JUnit] Name von TestCase bekommen Allgemeine Java-Themen 4
1 JUnit Test Suit Allgemeine Java-Themen 2
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
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
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
fastjack jUnit und Test von equals, hashCode, toString Allgemeine Java-Themen 11
D junit - frage zu fixtures/test suites Allgemeine Java-Themen 11
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
G JUnit Test Allgemeine Java-Themen 5
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
N ClassNotFound Exception bei JUnit Test? Allgemeine Java-Themen 2
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 Bekomme JUnit TEst nicht zum laufen :( Allgemeine Java-Themen 9
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

Ähnliche Java Themen

Neue Themen


Oben