Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- JUnit Klasse findet keinen Testcase (http://www.informatikerboard.de/board/thread.php?threadid=2016)
Geschrieben von Haevelin am 18.12.2014 um 19:36:
JUnit Klasse findet keinen Testcase
Ich habe folgende Klasse zur Kundenbewertung:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
package aufgabe18;
public class Kundenbewertung
{ public Zustand zustand;
public Kundenbewertung()
{ zustand= new ZustandBeobachtung(); }
public void korrektGezahlt()
{ zustand=zustand.folgezustand(new AktionPuenktlich()); }
public void verspaetetGezahlt()
{ zustand=zustand.folgezustand(new AktionUnpuenktlich()); }
public void nichtGezahlt()
{ zustand=zustand.folgezustand(new AktionNichtBezahlt()); }
public int kredit()
{ return zustand.kredit(); }
public String auskunft()
{ return zustand.auskunft(); } }
|
|
Hierzu habe ich folgende Testklasse geschrieben:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
package aufgabe18;
import static org.junit.Assert.*;
import junit.framework.TestCase;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class KundenbewertungTest extends TestCase
{ private static Zustand kritisch;
private static Kundenbewertung kw;
@Test
public void verspaetetGezahlt()
{ kw = new Kundenbewertung();
kw.verspaetetGezahlt();
Zustand kritisch= new ZustandKritisch();
assertSame(kw.zustand, kritisch); } }
|
|
Wenn ich die Testklasse als JUnit laufen lasse erhalte ich als Fehlermeldung:
No tests found in aufgabe18
Was habe ich falsch gemacht?
(Es wird ein State-Pattern in der Aufgabe verwendet)
Geschrieben von Karlito am 18.12.2014 um 22:04:
Hallo Haevelin,
assertSame prüft, ob es sich um genau das selbe Objekt handelt.
Kleine verdeutlischung: Wenn zwei Personen mit dem selben Stift schreiben, so müssen sie ihn sich teilen. Schreiben sie jedoch mit dem gleichen Stift, so sind es zwei Stifte, welche sich gleichen.
assertSame() prüft, ob zwei Variablen auf das selbe Objekt referenzieren. Um zu prüfen, ob die Objekte gleich sind, musst du assertEquals() vertwernden.
Edit: Ups, das ging an der Frage vorbei, beantwortet aber sicher eine Folgefrage...
Gruß,
Karlito
Geschrieben von Haevelin am 19.12.2014 um 09:43:
Hallo Karlito,
bei der Eingabe wird ein anderer Zustand erzeugt. Wenn dieser Zustand dann Zustandkritisch ist, dann wird dennoch wenn ich mit new ein Objekt ZustandKritisch erzeuge das unterschieden von dem Objekt, welches im Programm auch ZustandKritisch ist. D.h. beide Objekte sind erzeugt von ZustandKritisch, haben aber eine unterschiedliche Referenz. Daher funktioniert assertEquals nicht. Wie kann ich zwei Objekte, die unterschiedliche Referenz haben, aber vom gleichen Typ sind, auf Gleichheit testen? Bisher habe ich:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
|
package aufgabe18;
import static org.junit.Assert.*;
import junit.framework.TestCase;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class KundenbewertungTest
{
private static Zustand kritisch;
private static Kundenbewertung kw;
@Test
public void verspaetetGezahlt()
{ kw = new Kundenbewertung();
kw.verspaetetGezahlt(); // jetzt geht der Zustand von Kundenbewertung
// ZustandKritisch
Zustand kritisch= new ZustandKritisch(); assertEquals(kritisch,kw.zustand);
}
}
|
|
Geschrieben von Haevelin am 19.12.2014 um 09:48:
Jetzt habe ich eine Lösung; die Gleichheit der Klasse wird geprüft mit:
assertEquals(kritisch.getClass(),kw.zustand.getClass());
Forensoftware: Burning Board, entwickelt von WoltLab GmbH