Ich führe JUnit-Tests auf einer großen Codebasis aus und habe festgestellt, dass manchmal "Fehler" und manchmal "Fehler" auftreten. Was ist der Unterschied?
93
Ok, ich habe gerade ein Muster bemerkt und denke, ich habe es herausgefunden (korrigiere mich, wenn ich falsch liege). Es scheint mir, dass Fehler auftreten, wenn Ihre Testfälle fehlschlagen - dh Ihre Behauptungen sind falsch. Fehler sind unerwartete Fehler, die auftreten, wenn versucht wird, den Test tatsächlich auszuführen - Ausnahmen usw.
java.lang.AssertionError
wird, wird es als Testfehler anstelle eines Testfehlers angezeigt. Sie sollten in Betracht ziehen, Ihre eigene Antwort zu akzeptieren, da sie korrekt ist.@Test
mit kommentierenexpected = SomeException.class
.Wenn Ihr Test eine Ausnahme auslöst, die nicht durch das Assertion-Framework in Junit gesprudelt wird, wird dies als Fehler gemeldet. Beispielsweise meldet ein NullPointer oder eine ClassNotFound-Ausnahme einen Fehler:
oder,
Im Folgenden wird jedoch ein Fehler gemeldet:
oder,
oder auch:
Dies hängt von der verwendeten Junit-Version ab. Junit 4- unterscheidet zwischen einem Fehler und einem Fehler, Junit 4 vereinfacht dies jedoch nur als Fehler.
Der folgende Link bietet weitere interessante Beiträge:
http://www.devx.com/Java/Article/31983/1763/page/2
quelle
Aus "Pragmatisches Unit-Testen in Java 8 mit JUnit":
Assertions (oder Asserts) in JUnit sind statische Methodenaufrufe, die Sie in Ihre Tests einfügen. Jede Behauptung ist eine Gelegenheit, um zu überprüfen, ob eine Bedingung erfüllt ist. Wenn eine bestätigte Bedingung nicht zutrifft, stoppt der Test genau dort und JUnit meldet einen Testfehler.
(Es ist auch möglich, dass beim Ausführen des Tests durch JUnit eine Ausnahme ausgelöst und nicht abgefangen wird. In diesem Fall meldet JUnit einen Testfehler.)
quelle
Der folgende Test erklärt den Unterschied zwischen Testfehler und Testfehler .
Ich habe die Zeile kommentiert, die Testfehler und Testfehler auslöst.
Junit zeigt also Testfehler an, wenn Sie eine Ausnahme erhalten, und Testfehler, wenn Ihr erwarteter Ergebniswert nicht mit Ihrem tatsächlichen Wert übereinstimmt
quelle
Quellklasse: JUnitReportReporter.java
Wie Sie unten in der obigen Methode sehen können
Die Anzahl der Fehler wird erhöht, wenn es sich um eine Instanz von AssertionError handelt. Andernfalls wird (ein beliebiger Throwable) als Fehler gezählt.
quelle
Sie haben Recht, dass Fehler von den AssertionErrors stammen, die von den JUnit-Assertion-Methoden ausgelöst wurden, oder durch das Auslösen eines AssertionError oder durch das Auslösen einer Ausnahme, die Sie in Ihrer
@Test
Anmerkung deklariert haben , und Fehler von anderen, unerwarteten Ausnahmen. Aber es gibt einen wichtigen Unterschied zwischen ihnen:Ein Fehler bedeutet, dass Ihr Test korrekt ausgeführt wurde und ein Fehler in Ihrem Code festgestellt wurde.
Ein Fehler könnte einen Fehler in Ihrem Code bedeuten, auf den Sie jedoch nicht einmal getestet haben. Es könnte auch bedeuten, dass sich der Fehler im Test selbst befindet.
Kurz gesagt, ein Fehler bedeutet, dass Sie den zu testenden Code neu schreiben müssen. Ein Fehler bedeutet, dass es sich möglicherweise um den Komponententest handelt, den Sie neu schreiben müssen. Dies kann auch dann bedeuten, wenn der Fehler in Ihrem Code aufgetreten ist, z. B. a
NullPointerException
, weil Sie einen Fehler entdeckt haben, auf den Sie nicht einmal getestet haben. Daher ist es möglicherweise ratsam, dies zu testen.quelle
Ironischerweise bieten Junit und andere testbezogene Frameworks (testng, hamcrest) Assert-Operationen, die den Zustand überprüfen und prüfen, ob er fehlschlägt wird "unter der Haube" ein java.lang.AssertionError ausgelöst, der übrigens java.lang.Error erweitert.
Aber es widerspricht keineswegs den obigen Antworten, die natürlich voll gültig sind. Um einen bestimmten Testablauf als Fehler zu markieren, kann AssertionError ausgelöst werden. Ich bin mir jedoch nicht sicher, ob er wirklich in den entsprechenden Handbüchern dokumentiert ist, da er besser für die Verwendung der dedizierten fail () -API geeignet ist. Andere Arten von Throwable werden als Fehler und nicht als Fehler betrachtet.
quelle
Grundsätzlich beziehen sich Fehler auf unerfüllte Aussagen, während Fehler auf eine abnormale Testausführung zurückzuführen sind . und ich denke, jede IDE hat symbolische Symbole mit unterschiedlichen Farben für bestanden , nicht bestanden und mit Fehlertests .
Weitere Informationen finden Sie hier .
quelle