Как мога да използвам JUnit4 по идиоматичен начин, за да тествам дали даден код хвърля изключение?
Въпреки че със сигурност мога да направя нещо подобно:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Спомням си, че има анотация или Assert.xyz или нещо, което е много по-малко сложно и много по-съответстващо на духа на JUnit за такива ситуации.
JUnit 4
поддържа тази функция:
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Справка :
Какво ще кажете за това: Хванете много общо изключение, уверете се, че то е излязло от блока за хващане, след което потвърдете, че класът на изключението е такъв, какъвто очаквате да бъде. Това твърдение ще се провали, ако а) изключението е от грешен тип (например ако вместо него сте получили Null Pointer) и б) изключението никога не е било хвърляно.
public void testFooThrowsIndexOutOfBoundsException() {
Throwable e = null;
try {
foo.doStuff();
} catch (Throwable ex) {
e = ex;
}
assertTrue(e instanceof IndexOutOfBoundsException);
}