2016-10-11 2 views
1

Ich habe ein Java-Programm mit einer Address-Klasse, die eine Postleitzahl enthalten sollte, mit dem Format \ d {4} [A-Z] {2}. Dieser Code löst eine benutzerdefinierte (überprüfte) IncorrectPostcodeException aus, und ich möchte dies mit JUnit testen. Bei anderen Fragen habe ich herausgefunden, wie man testen kann, ob die richtige Ausnahme wirklich geworfen wird.JUnit Test erwartete Ausnahme mit mehreren (verschiedenen) Argumenten

Ich möchte jetzt den Test mit mehreren Argumenten ausführen. Um sicherzustellen, dass der Test wie erwartet funktioniert, habe ich auch eine "falsche" Postleitzahl eingefügt, damit der Test fehlschlägt. Wenn ich dies mit einer normalen Methode versuche, funktioniert es wie erwartet, und der folgende Test schlägt fehl, weil die zweite Postleitzahl nicht korrekt ist.

@Test 
public void testPostcode() throws IncorrectPostcodeException { 
Address correctPostcode = new Address(); 
correctPostcode.setPostcode("1234AB"); 
correctPostcode.setPostcode("12"); // THIS SHOULD FAIL THE TEST 
} 

Wenn ich jedoch eine Ausnahme Test in ähnlicher Weise zu schreiben, ist der Test nicht fehlschlagen:

@Test(expected=IncorrectPostcodeException.class) 
public void testPostcodeException() throws IncorrectPostcodeException { 
Address wrongPostcode = new Address(); 
System.out.println("1"); 
wrongPostcode.setPostcode("123AB"); // throws exception as expected 
System.out.println("2"); 
wrongPostcode.setPostcode("1234AB"); //THIS SHOULD FAIL THE TEST 
System.out.println("3"); 
wrongPostcode.setPostcode("123ABC"); // should throw exception too but is not reached 
} 

Wenn ich diese zweite Postleitzahl als erste oder einzige Testfall setzen, schlägt der Test als erwartet. Die zum Debuggen hinzugefügten println-Anweisungen zeigen jedoch, dass nur die erste Zeile ausgeführt wird.

Wie mache ich JUnit Test eine Ausnahme mit mehreren Eingabeargumenten, ohne für jeden Testfall individuelle Methoden zu schreiben? Ich suchte nach Antworten, aber andere Fragen scheinen sich darauf zu konzentrieren, mehrere verschiedene Ausnahmen in einer Methode zu testen, nicht mehrere Argumente für eine Ausnahme.

Antwort

0

In Ihrem Test werfen Sie eine Ausnahme mit "123AB". Und der Test endet hier. Die anderen Methoden (Postleitzahlen mit anderen Daten setzen, System Out ...) werden nicht ausgeführt.

Wenn Sie die anderen Fälle überprüfen möchten, sollten sie in anderen Testfällen sein.

Sie könnten versuchen, 2 parametrisierte Tests zu machen, einen mit allen fälligen Fällen und einen mit allen Ausnahmen.

+0

Danke! Ich wusste nicht über parametrisiert. Ich habe es geschafft, die "Fail Codes" mit diesem Ansatz zu beheben, aber wenn ich das gleiche mit "guten Codes" machen will, muss ich eine neue Testklasse schreiben, richtig? In diesem Fall könnte ich sie auch in die normale Testmethode einbeziehen. –