Der Unterschied zwischen Fehler und Fehler in JUnit

1. Einleitung

In diesem Tutorial werden die Unterschiede zwischen einem Fehler und einem Fehler in JUnit-Tests untersucht.

Kurz gesagt, Fehler sind unerfüllte Aussagen, während Fehler auf eine abnormale Testausführung zurückzuführen sind.

2. Beispielcode

Betrachten wir ein sehr vereinfachtes Beispiel, nämlich eine Taschenrechnerklasse mit einer Methode zum Teilen zweier Doppelwerte :

public static double divideNumbers(double dividend, double divisor) { if (divisor == 0) { throw new ArithmeticException("Division by zero!"); } return dividend / divisor; }

Beachten Sie, dass Java keine ArithmeticException für die doppelte Division alleine auslöst - es gibt Infinity oder NaN zurück .

3. Beispielfehler

Wenn Sie Unit-Tests mit JUnit schreiben, kann es vorkommen, dass Tests fehlschlagen. Eine Möglichkeit besteht darin, dass unser Code seine Testkriterien nicht erfüllt. Dies bedeutet, dass ein oder mehrere Testfälle fehlschlagen, weil Aussagen nicht erfüllt sind.

Im folgenden Beispiel schlägt die Behauptung fehl, da das Ergebnis der Division 2 und nicht 15 ist. Unsere Behauptung und das tatsächliche Ergebnis stimmen einfach nicht überein:

@Test void whenDivideNumbers_thenExpectWrongResult() { double result = SimpleCalculator.divideNumbers(6, 3); assertEquals(15, result); }

4. Beispielfehler

Eine andere Möglichkeit besteht darin, dass wir während der Testausführung eine unerwartete Situation haben , höchstwahrscheinlich aufgrund einer Ausnahme . beispielsweise einen Zugriff auf null wird Bezug eine erhöhen Runtime .

Sehen wir uns ein Beispiel an, in dem der Test mit einem Fehler abgebrochen wird, weil wir versuchen, durch Null zu teilen, gegen die wir uns explizit schützen, indem wir eine Ausnahme in unserem Rechnercode auslösen:

@Test void whenDivideByZero_thenThrowsException(){ SimpleCalculator.divideNumbers(10, 0); } 

Jetzt können wir diesen Test beheben, indem wir einfach die Ausnahme als eine unserer Behauptungen aufnehmen.

@Test void whenDivideByZero_thenAssertException(){ assertThrows(ArithmeticException.class, () -> SimpleCalculator.divideNumbers(10, 0)); }

Wenn dann die Ausnahme ausgelöst wird, besteht der Test, aber wenn nicht, wäre dies ein weiterer Fehler.

5. Schlussfolgerung

Sowohl Fehler als auch Fehler in JUnit-Tests weisen auf eine unerwünschte Situation hin, aber ihre Semantik ist unterschiedlich. Fehler melden ein ungültiges Testergebnis, Fehler weisen auf eine unerwartete Testausführung hin.

Schauen Sie sich auch den Beispielcode bei GitHub an.