JUnit-Test fehlgeschlagen, obwohl die erwartete Ausnahme ausgelöst wird

8

Ich kann nicht herausfinden, warum einer meiner Tests versagt.

Hier ist der Test:

%Vor%

Ich habe einen Haltepunkt gesetzt und den Vorgang mehrmals durchlaufen. Es geht in die zweite if-Anweisung in der ChessPiece -Klasse und scheint die Ausnahme zu werfen. Der Prozess kehrt dann zur Klasse Rook zurück und gibt unter dem Block super den Wert false zurück.

Irgendwelche Ideen, was passiert? Danke

Relevanter Code:

%Vor%     
JZachow 08.03.2013, 06:53
quelle

3 Antworten

3
  

Es geht in die zweite if-Anweisung in der ChessPiece-Klasse und   scheint die Ausnahme zu werfen. Der Prozess geht dann zurück zum Turm   Klasse und gibt false unter dem Superblock zurück.

Was passiert, ist die erste Zeile in der Methode isValidMove() der Rook Aufrufe super , also geht die Kontrolle dorthin, aber wegen der Bedingung, dass der zweite if nicht erfüllt ist, wird IllegalArgumentException und dann ausgegeben Die Steuerung kehrt zurück in die Kindklasse dh Rook und kann nicht return false jetzt, da super eine Ausnahme ausgelöst hat, sodass die Ausnahme erneut von dieser Methode geworfen wird und von junit complainsIfFromLocIsDifferentObject method neu geworfen wird.

Dies wird von JUnit Framework verstanden und sollte den Testfall bestehen.

Überprüfen Sie, ob Sie diese Zeile @RunWith(value = BlockJUnit4ClassRunner.class) in der Testfallklasse haben.

UPDATE:

%Vor%

Dieser Testfall gilt für mich.

    
Narendra Pathai 08.03.2013, 07:07
quelle
1

Wenn Sie in einen Kommentar schreiben, sagt Ihnen JUnit, was falsch ist:

  

Ich bekomme "java.lang.AssertionError: Expected exception: java.lang.IllegalArgumentException

Sie erhalten einen AssertionError, wahrscheinlich aus einer Assertion, bevor die erwartete Ausnahme ausgelöst wird oder weil die Exception behandelt wird und dann eine Assertion ausgeführt wird, die fehlschlägt.

Wenn Sie den erwarteten Wert aus der Annotation entfernen, gibt Ihnen JUnit den genauen Ort an, an dem die Assertion fehlgeschlagen ist (a.k.a. stacktrace)

    
Jens Schauder 08.03.2013 08:09
quelle
0

Normalerweise würde ich keine JUnit-Assertions um den Code herum schreiben, von dem ich erwarte, dass die Ausnahme ausgelöst wird.

Also

%Vor%

Andernfalls wird die Ausnahme in der JUnit assert-Anweisung ausgelöst, die die Ausnahme in eine assertionException umschließt.

    
Simon Hellinger 08.03.2013 08:15
quelle

Tags und Links