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%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.
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)
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.