2012-10-17 10 views
14

Wenn ein Testfall absichtlich fehlschlägt (z. B. wenn keine Ausnahme ausgelöst wird), habe ich gesehen, dass Benutzer fail() und assertTrue (false) verwenden. Gibt es Vorteile bei der Verwendung des einen oder anderen?Bewährte Methoden: fail() vs. assertTrue (false)

try { 
    //method call that should throw exception 
    fail("oops"); 
} catch (Exception e) {} 

gegen

try { 
    //method call that should throw exception 
    assertTrue("oops", false); 
} catch (Exception e) {} 
+0

Warum möchten Sie einen Test nicht bestehen? – Victor

+4

Wenn eine Ausnahme hätte ausgelöst werden sollen, war es aber nicht. Stimmen Sie meinen Beispielen nicht zu? – TrevorBliss

+0

Ausnahme sollte eine Ausnahme sein. Ein guter Code sollte niemals eine Ausnahme erwarten, Ihr Code sollte eine Ausnahme vermeiden, bevor er ausgelöst wurde. – Victor

Antwort

20

Gibt es Vorteile bei der Verwendung des einen oder anderen?

Funktional, nein. fail() vermittelt jedoch die Absicht deutlicher und ist daher besser.

13

Verwenden JUnit expected Parameter in der @Test Anmerkung

@Test(expected = ArithmeticException.class) 
public void divisionWithException() { 
    int i = 1/0; 
} 

Dies wird fehlschlagen, wenn ein ArithmeticException nicht ausgelöst.

+2

Das OP sagt "zum Beispiel, wenn eine Ausnahme nicht geworfen wird" Es könnte andere Szenarien geben. – NullUserException

+3

Ich habe festgestellt, dass die 'EpecedException'-Regel ein robusterer Mechanismus zum Testen erwarteter Ausnahmen ist, da sie unmittelbar vor der zu testenden Methode platziert werden kann, wodurch sichergestellt wird, dass nicht die Testkonfiguration eine Ausnahme ausgelöst hat. –

+1

Aber wir erwarten eine Ausnahme geworfen werden. Also wenn es nicht klappt, sollte es scheitern. Warum sollte man sich mit der Try/Catch-Logik beschäftigen? Wir wollen die Ausnahme. – BeRecursive

5

assertTrue nur Anrufe fehlschlagen.

IMHO fail() ist einfacher und klarer.

1

Beide können verwendet werden (obwohl fail ist besser, weil das ist, was wirklich gemeint ist), aber da Sie JUnit verwenden, können Sie stattdessen @Test(expected=MyException.class) verwenden.

1

Verwenden Sie fail, sonst wird jemand den Fehler im Protokoll betrachten und denken: "Was ist falsch, das sollte wahr sein".

+0

"Was ist falsch, das sollte wahr sein?" :-D – asgs

Verwandte Themen