Frage Was ist der Unterschied zwischen Fehler und Fehler in JUnit?


Ich verwende JUnit-Tests auf einer großen Codebasis, und ich habe festgestellt, dass ich manchmal "Fehler" bekomme, während ich manchmal "Fehler" bekomme. Was ist der Unterschied?


76
2017-08-06 17:00


Ursprung


Antworten:


Ok, ich habe gerade ein Muster bemerkt und denke, dass ich es herausgefunden habe (korrigiere mich, wenn ich falsch liege). Es scheint mir, dass Fehler auftreten, wenn Ihre Testfälle fehlschlagen - d. H. Ihre Behauptungen sind falsch. Fehler sind unerwartete Fehler, die beim Ausführen des Tests auftreten - Ausnahmen usw.


95
2017-08-06 17:05



Wenn Ihr Test eine Ausnahme auslöst, die nicht durch das Assertion-Framework in Junit geleitet wird, wird dies als Fehler gemeldet. Beispielsweise meldet eine NullPointer-Ausnahme 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);
}

Nachdem dies gesagt wurde, wird Folgendes einen Fehler melden:

Assert.fail("Failure here");

oder,

Assert.assertEquals(1, 2);

oder auch:

throw new AssertionException(e);

Es hängt von der Junit-Version ab, die Sie verwenden. Junit 4- unterscheidet zwischen einem Fehler und einem Fehler, aber Junit 4 vereinfacht es nur als Fehler.

Der folgende Link bietet weitere interessante Eingaben:

http://www.devx.com/Java/Article/31983/1763/page/2


13
2018-04-11 15:45



Der folgende Test erklärt den Unterschied zwischen Testfehler versus 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"
        }

Daher zeigt Junit einen Testfehler an, wenn Sie eine Ausnahme erhalten, und testen einen Fehler, wenn der erwartete Ergebniswert nicht mit Ihrem tatsächlichen Wert übereinstimmt


4
2017-08-04 01:42



Aus "Pragmatischer Unit Testing in Java 8 mit JUnit":

Behauptungen (oder Behauptungen) in JUnit sind statische Methodenaufrufe, in die Sie fallen Ihre Tests. Jede Behauptung ist eine Gelegenheit, diese Bedingung zu überprüfen ist wahr. Wenn eine bestätigte Bedingung nicht erfüllt ist, hält der Test an dort, und JUnit meldet einen Testfehler.

(Es ist auch möglich, dass, wenn JUnit Ihren Test ausführt, eine Ausnahme ausgelöst wird und nicht gefangen. In diesem Fall meldet JUnit einen Testfehler.)


2
2018-01-14 21:10



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 () instanceof AssertionError

Die Anzahl der Fehler wird erhöht, wenn es sich um eine AssertionError-Instanz handelt, andernfalls (alle Throwable) wird als Fehler gezählt.


1
2017-09-08 09:16