JUnit Klasse findet keinen Testcase

Neue Frage »

Auf diesen Beitrag antworten »
Haevelin 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)
 
Auf diesen Beitrag antworten »
Karlito

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
Auf diesen Beitrag antworten »
Haevelin

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); 		 	
     } 
}
Auf diesen Beitrag antworten »
Haevelin

Jetzt habe ich eine Lösung; die Gleichheit der Klasse wird geprüft mit:


assertEquals(kritisch.getClass(),kw.zustand.getClass());
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »