JUnit 4 Erwarteter Ausnahmetyp
Ich versuche zu tun, eine JUnit testen von code, die jemand anderes geschrieben hat, aber ich kann nicht herausfinden, wie um zu testen, für die Ausnahme, weil die Ausnahme zu fehlen scheint ein Typ.
public Pirate(String name, int initialGold) throws Exception {
if(initialGold < 0)
throw new Exception("Init Gold must be >= 0");
this.name = name;
this.numGold = initialGold;
this.health = Pirate.DEFAULT_HEALTH;
this.isCursed = false;
}
Meine JUnit-Code-snippet:
@Test
public static void constructorTest() throws Exception{
rodgers = new Pirate("Dread Pirate Rodgers", 10000);
assertEquals("Dread Pirate Rodgers" , rodgers.getName());
assertEquals(10000, rodgers.getNumGold());
assertEquals(100, rodgers.getHealth());
assertEquals(false, rodgers.getIsCursed());
}
@Test()
public static void exceptionTest() throws Exception{
rodgers = new Pirate("Dread Pirate Rodgers" , -100);
}
Ich weiß, ich brauche zu setzen, erwartet = (irgendeine Art von Ausnahme) in den Klammern ist der test, aber ich bin ratlos, um den Typ der Ausnahme.
InformationsquelleAutor der Frage Marshall Tigerus | 2013-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt ' s eigentlich eine alternative zu den
@Test(expected=Xyz.class)
in JUnit 4.7 mitRegeln
undExpectedException
In den test-Fall deklarieren Sie eine
ExpectedException
kommentiert mit@Rule
und weisen Sie ihm einen Wert vonExpectedException.none()
. Dann in deinem test, mit Ausnahme ersetzen Sie den Wert mit den tatsächlich zu erwartenden Wert. Der Vorteil dieser ist, dass ohne die hässlichen try/catch-Methode können Sie angeben, wie die Nachricht in die Ausnahme warDiese Methode zu verwenden, Sie könnten in der Lage sein, um test für die Nachricht, die in der generischen Ausnahme zu sein, etwas besonderes.
NEBEN
Ein weiterer Vorteil der Verwendung
ExpectedException
ist, dass man kann genauer Umfang der Ausnahme im Rahmen der test-Fall. Wenn Sie nur mit@Test(expected=Xyz.class)
- Anmerkung für die Prüfung, dann die Xyz-Ausnahme geworfen werden kann, überall in der test-code-einschließlich aller test-setup oder vor-gut im test-Methode. Dies führt zu einer falsch-positiven.Mit ExpectedException, können Sie verzögern, die Angabe der
thrown.expect(Xyz.class)
bis nach setup und pre-behauptet, kurz vor der eigentlich Aufruf der Methode im test. Also, Sie genauer Umfang der Ausnahme von der eigentlichen Methodenaufruf anstatt die test fixture selbst.JUnit-5 HINWEIS:
JUnit-5 hat entfernt
@Test(expected=...)
@Rule
undExpectedException
insgesamt. Sie werden durch neue ersetztassertThrows()
Wonach die Verwendung von Java 8 und lambda-syntax.InformationsquelleAutor der Antwort Kevin Welker
Konnte man entweder erwartet in @Test annotation oder eine explizite catch-block und eine scheiternwenn der Programmablauf nicht wie erwartet.
Meine persönliche Präferenz ist die erste Lösung.
InformationsquelleAutor der Antwort Steve Oh
Können Sie JUnit 'erwartet', um zu testen, Ausnahmen:
Danach ist es bis zu Ihnen zu werfen, dass die Besondere Ausnahme in Ihrem code.
InformationsquelleAutor der Antwort Mick
Ich würde nicht werfen eine
Exception
wenn das gold ist nicht größer als oder gleich null ist. Ich würde werfen eineIllegalArgumentException
. Es klingt sicherlich wie es ist illegal, IhrPirate
einen negativen Betrag von gold.Dann im JUnit-test-Fall erwarten, dass die
IllegalArgumentException
.InformationsquelleAutor der Antwort rgettman