Antworten:
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.
@Test
mit kommentieren expected = 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:
String s = null;
s.trim();
oder,
try {
// your code
} catch(Exception e) {
// log the exception
throw new MyException(e);
}
Im Folgenden wird jedoch ein Fehler gemeldet:
Assert.fail("Failure here");
oder,
Assert.assertEquals(1, 2);
oder auch:
throw new AssertionException(e);
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:
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.)
Ich habe die Zeile kommentiert, die Testfehler und Testfehler auslöst.
@Test
public void testErrorVsTestFailure() {
final String sampleString = null;
assertEquals('j', sampleString.charAt(0) );
//above line throws test error as you are trying to access charAt() method on null reference
assertEquals(sampleString, "jacob");
//above line throws Test failure as the actual value-a null , is not equal to expected value-string "jacob"
}
Junit zeigt also Testfehler an, wenn Sie eine Ausnahme erhalten, und Testfehler, wenn Ihr erwarteter Ergebniswert nicht mit Ihrem tatsächlichen Wert übereinstimmt
Quellklasse: JUnitReportReporter.java
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String defaultOutputDirectory) {
//......
for (ITestResult tr : (Set) entry.getValue()) {
TestTag testTag = new TestTag();
boolean isSuccess = tr.getStatus() == 1;
if (!(isSuccess)) {
if (tr.getThrowable() instanceof AssertionError)
++errors;
else {
++failures;
}
}
}
Wie Sie unten in der obigen Methode sehen können
tr.getThrowable () Instanz von AssertionError
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.
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.
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.
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 .
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.