JUnit assertEquals funktioniert nichgt wie es sollte :(

sharlatan

Mitglied
Ich habe ein umfangreiches programm welches ich mit JUnit teste, allerdings scheint mir eine funktion nicht so zu funktionieren wie sie sollte.

Um die übersicht zu wahren habe ich hier ein sehr viel vereinfachteres beispiel welches aber exakt den selben fehler beinhalten müsste:

Java:
public class WoerterZaehlenTest {

  @Test
	public void testText_3() throws IOException {
		
		
//		---------------------------------------------------------------------------------

		Map<String, Verbindung> m1 = new HashMap<String, Verbindung>();
		
		Verbindung m1w = new Verbindung(3, "vor");
		m1.put("vor", m1w);
		
        Map<String, Verbindung> m2 = new HashMap<String, Verbindung>();
		
		Verbindung m2w = new Verbindung(3, "vor");
		m2.put("vor", m2w);
		
		assertEquals("ERROR404", m1, m2);
		assertTrue("ERROR303", m1.equals(m2));
		
		
		
//		---------------------------------------------------------------------------------
		

   }
}

Verbindung meint ein Objekt welches die parameter(int, string) beinhaltet.
Es werden also zwei hashmaps verglichen mit dem assertEquals( danach probiere ich dasselbe nochmals in anderer schreibform). Die hashmaps habe ich komplett identisch initalisiert, ergo- sie sind gleich, equal.

WO IST DER FEHLER IN MEINER DENKE?

bitte helft mir,
danke.
Der Sharlatan
😛opcorn:😛opcorn:😛opcorn:
 
Zuletzt bearbeitet:
wie meinst du das?


die klasse Verbindung kriegt den int der die häufigkeit des Strings wort besagt.
equals soll gucken ob die beiden maps identische objekte beinhaltet. heißt die werte des strings und int sollen identisch sein nicht das objekt selbst
 
Map.equals benutzt auch nur die equals() Methode von den Objekten, die in ihr gespeichert sind. Wenn deine Verbindung keine equals() Methode hat, wir ein Referenzenvergleich gemacht und kein "inhaltlicher", darum ist die Map nicht equal.

edit: Du speicherst keine Strings, sondern Verbindungs-Objekte
 
Zuletzt bearbeitet:
Java:
public class Verbindung {

    private int hauefigkeit;
    private String wort;

    public Verbindung(int haeufigkeit, String wort){
        this.hauefigkeit = haeufigkeit;
        this.wort = wort;
    }

    public int getHauefigkeit() {
        return hauefigkeit;
    }
    public void setHauefigkeit(int hauefigkeit) {
        this.hauefigkeit = hauefigkeit;
    }
    public String getWort() {
        return wort;
    }
    public void setWort(String wort) {
        this.wort = wort;
    }
    
    public void erhoeheHaufigkeit() {
    	this.hauefigkeit = hauefigkeit + 1;
    }


}

so sieht meine verbindung klasse aus.
heißt das jetzt ich muss da noch ne methode für equals schreiben oder wie?
oder muss da nur was importiert werden?
 
Du mußt nichts importieren, sondern nur überschreiben. Die equals()-Methode besitzt jedes Objekt, als einfach overwrite und die Felder checken, von denen Du meinst, sie würden die Gleichheit einer "Verbindung" beschreiben. Am Ende sollte auch hashCode überschrieben werden, einfach mal googlen.
 

Zurück
Oben