Miten voin käyttää JUnit4:ää idiomaattisesti testatakseni, että jokin koodi heittää poikkeuksen?
Vaikka voin varmasti tehdä jotain tällaista:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Muistutan, että on olemassa annotaatio tai Assert.xyz tai jotain, joka on paljon vähemmän kömpelö ja paljon enemmän JUnitin hengessä tällaisia tilanteita varten.
JUnit 4
tukee tätä:
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Viite :
Entäpä tämä: Varmista, että se pääsee ulos catch-lohkosta, ja vahvista sitten, että poikkeuksen luokka on se, jonka odotat sen olevan. Tämä väite epäonnistuu, jos a) poikkeus on väärän tyyppinen (esimerkiksi jos saat sen sijaan Null Pointerin) ja b) poikkeusta ei koskaan heitetty.
public void testFooThrowsIndexOutOfBoundsException() {
Throwable e = null;
try {
foo.doStuff();
} catch (Throwable ex) {
e = ex;
}
assertTrue(e instanceof IndexOutOfBoundsException);
}