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.
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. –