In JUnit4 können Sie parametrisierte Komponententests schreiben, indem Sie die Parametersammlung in einer Methode bereitstellen, die an den Konstruktor des Tests übergeben und in einer anderen Methode getestet wird. Wenn ich einen Parameter habe, für den ich eine Ausnahme erwarte, wie kann ich das angeben?Wie kann ich Ausnahmen in einem parametrisierten Test testen?
Antwort
if (parameter == EXCEPTION_EXPECTED) {
try {
method(parameter);
fail("didn't throw an exception!");
} catch (ExpectedException ee) {
// Test succeded!
}
}
Wenn Sie catch-exception anstelle der entsprechenden Anmerkungen und Regeln von JUnit4 verwendet, dann wird Ihr Code würde wie folgt aussehen:
catchException(obj).method(parameter);
if (parameter != EXCEPTION_EXPECTED) {
assert caughtException() instanceof ExpectedException;
}
// more assertions
Im Gegensatz zu den anderen vorschlagen, würde ich nicht jede Art von einführen Logik zu Tests - auch einfache Wenns!
Was sollten Sie haben zwei Testmethoden:
- erste gültigen Parameter übernimmt (und erwartet eine Ausgabe)
- Sekunden nehmen ungültige Parameter (und erwarten Ausnahmen)
Nicht sicher wenn JUnit mit seinem erbauerbasierten parametrisierten Test dazu in der Lage ist. Wahrscheinlich müssten Sie dafür zwei Testklassen erstellen. Gehen Sie mit JUnit Params oder TestNG, die viel bequemere Lösung bieten.
Gabriel, bitte sehen Sie sich die TestWatcher-Regel an (seit JUnit 4.9). Hier ist der Beispielcode aus http://junit-team.github.io/junit/javadoc/4.11/org/junit/rules/TestWatcher.html zitiert:
public static class WatchmanTest {
private static String watchedLog;
@Rule
public TestWatcher watchman= new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
watchedLog+= description + "\n";
}
@Override
protected void succeeded(Description description) {
watchedLog+= description + " " + "success!\n";
}
};
@Test
public void fails() {
fail();
}
@Test
public void succeeds() {
}
}
Ein anderer Ansatz ErrorCollector von JUnit 4.7 zu verwenden wäre: @Rule öffentliche ExpectedException geworfen = ExpectedException.none();
@Test
public void testCollectingErrors() {
thrown.handleAssertionErrors();
thrown.expect(MultipleFailureException.class); // or #expectMessage()/#expectCause()
collector.checkThat("a", equalTo("b"));
//...
}
dies ist, wie ich junit parametrisierte Test mit erwarteten Ausnahmen verwenden:
@RunWith(Parameterized.class)
public class CalcDivTest {
@Parameter(0)
public int num1;
@Parameter(1)
public int num2;
@Parameter(2)
public int expectedResult;
@Parameter(3)
public Class<? extends Exception> expectedException;
@Parameter(4)
public String expectedExceptionMsg;
@Rule
public ExpectedException thrown = ExpectedException.none();
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {
// calculation scenarios:
{ 120, 10, 12, null, null }, // simple div
{ 120, 0, -1, ArithmeticException.class, "/ by zero" }, // div by zero
});
}
@Test
public void testDiv() throws CCalculationException {
//setup expected exception
if (expectedException != null) {
thrown.expect(expectedException);
thrown.expectMessage(expectedExceptionMsg);
}
assertEquals("calculation result is not as", expectedResult, div(num1, num2));
}
private int div(int a, int b) {
return a/b;
}
}
- 1. Wie kann ich setResult() in einem Android Espresso-Test testen?
- 2. Pex: Wie kann ich in einem parametrisierten Test angeben, dass ich unter bestimmten Bedingungen eine Ausnahme erwarte?
- 3. Kann ich mehrere ausgelöste Ausnahmen in einer Testmethode testen?
- 4. Wie kann ich mit PHPUnit auf mehrere Ausnahmen testen?
- 5. Testen von Ausnahmen in PHPUnit
- 6. JUnit Ausnahmen Handhabung Test
- 7. Wie deaktiviere ich einen Googletest (gtest) parametrisierten Test?
- 8. Wie kann ich Ausnahmen in Delphi auslösen?
- 9. Wie kann ich Ausnahmen in einem Listenverständnis in Python behandeln?
- 10. Wie kann ich Ansichten in einem Rails-Plugin testen?
- 11. Wie kann ich STDERR mit Test :: More testen?
- 12. Wie kann ich ein $ scope. $ On-Ereignis in einem Jasmine-Test testen?
- 13. Wie kann ich einen JUnit parametrisierten Test-Runner für eine Sammlung generischer Typen aufrufen?
- 14. Wie kann ich Datenbankmigrationen testen?
- 15. Testen von Ausnahmen einer Methode mit EasyMock
- 16. Wie kann ich Leistungsoptimierungen in C testen?
- 17. Wie erstelle ich einen parametrisierten Typ aus einem Makro?
- 18. So testen Sie Ausnahmen im Labor?
- 19. Wie für Ausnahmen von Arbeitsspeicher testen?
- 20. Wie kann ich Stunnel testen?
- 21. Wie kann ich $ watch in Winkel testen
- 22. Sollte ich Ausnahmen erzwingen, um sie zu testen?
- 23. Test oder nicht testen?
- 24. Wie testen $ Scope in Jasmine Test?
- 25. Wie kann ich die Browsergröße in einem Winkelmesser-Test einstellen
- 26. -Test zu erwarten Ausnahmen in Kotlin
- 27. Wie kann ich einen Finalizer testen?
- 28. Wie kann ich einen Filter testen?
- 29. Testen von Einheiten Ausnahmen mit PHPUnit?
- 30. Wie storniere ich meine eigene Test-In-App-Kauf-Transaktion? (damit ich wieder testen kann)
ich für eine vernünftige Lösung gehofft - z.B. etwas wie mehrere @Parameters-Methoden mit optional erwartetem Annotationsargument, aber ich denke, so etwas ist kein Teil des Frameworks. Trotzdem danke. –