Ursache eines unerwarteten Verhaltens mit dem erwarteten Ausnahmemechanismus von JUnit 4?

8

Ich versuche zu testen, dass eine bestimmte Methode eine erwartete Ausnahme von einer Methode auslöst. Laut JUnit4-Dokumentation und diese Antwort < Ich habe den Test geschrieben als:

%Vor%

Dieser Code schlägt jedoch den JUnit-Test fehl und meldet die ausgelöste (und erwartete) Ausnahme als Fehler.

Die Methode, die ich teste, hat nur das im Körper:

%Vor%

Außerdem besteht der folgende Test:

%Vor%

Das bedeutet, dass die erwartete Ausnahme tatsächlich ausgelöst wird.

Ich plane tatsächlich, die Methode zu ändern, um tatsächlich etwas zu tun, anstatt nur die Ausnahme zu werfen, aber es hat mich neugierig gemacht, was das Problem verursacht hat, damit es in Zukunft nicht wieder passieren könnte.

Folgende Überprüfungen wurden durchgeführt:

  • Die in den Testfall importierte CannotUndoException ist die richtige
  • Version 4 von JUnit ist die einzige auf meinem Klassenpfad
  • eine saubere und Build von Eclipse-Arbeitsbereich hat das Ergebnis nicht verändert

Ich benutze JUnit 4.1, und im selben Test verwende ich Mockito.

Was könnte den fehlerhaften Fehler verursachen?

    
Grundlefleck 27.12.2008, 19:25
quelle

4 Antworten

10

Ich habe das Problem gefunden.

Der TestRunner, den ich benutzte, war der richtige (JUnit 4), aber ich erklärte meine Testklasse als:

%Vor%

Ich nehme an, dass der Testläufer ihn als JUnit 3-Test behandelt. Ich habe extends TestCase entfernt und die erwarteten Ergebnisse erhalten.

    
Grundlefleck 27.12.2008, 20:33
quelle
3

Ihr Testcode sieht für mich ok aus.

Stelle sicher, dass du mit einem junit 4 testrunner, nicht mit einem junit 3.8 testrunner fährst - das könnte hier der Übeltäter sein (versuche es von der Kommandozeile aus oder überprüfe einfach die Kommandozeile beim Ausführen deines Tests). Der Klassenpfad Ihres Testrouns stimmt möglicherweise nicht mit Ihrem Projektklassenpfad überein

Dies ist besonders in IDEs der Fall. Alternativ könntest du auch versuchen, zu junit 4.4 zu gehen und zu sehen, ob das dein Problem löst. (Junit 4.5 kann andere Probleme verursachen.)

    
krosenvold 27.12.2008 19:44
quelle
1

Ich hatte ein ähnliches Problem und habe es behoben, indem ich die Annotation hinzugefügt habe

%Vor%

Dies teilt dem Unit-Tester mit, dass er es mit der 4er-Version von Junit ausführen soll.

    
cdecker 20.01.2009 23:39
quelle
0

Neugierig.

Ich habe drei Klassen geschrieben:

Ein UndoCommand:

%Vor%

Eine CannotUndoException:

%Vor%

Und eine JUnit 4.4-Testklasse:

%Vor%

Funktioniert einwandfrei - alle Tests bestehen, "grünes" Ergebnis.

Wenn ich die (erwartete = ...) aus der Annotation entferne, schlägt der Test wie erwartet fehl.

Ich verwende Sun JDK 6, JUnit 4.4 und IntelliJ 7.0.5.

Wie unterscheiden sich deine?

    
duffymo 27.12.2008 19:46
quelle