Kā es varu idiomātiski izmantot JUnit4, lai pārbaudītu, vai kāds kods met izņēmumu?
Lai gan es noteikti varu darīt kaut ko līdzīgu:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Es atceros, ka ir anotācija vai Assert.xyz, vai kaut kas cits, kas ir daudz mazāk sarežģīts un daudz vairāk atbilst JUnit garam šādās situācijās.
JUnit 4
ir nodrošināts atbalsts šim nolūkam:
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Atsauce :
Kā par to: Pēc tam pārliecinieties, ka izņēmums izkļūst no aizķeršanas bloka, un pēc tam aplieciniet, ka izņēmuma klase ir tāda, kādu jūs to sagaidāt. Šis apgalvojums neizdosies, ja a) izņēmums ir nepareiza tipa (piemēram, ja tā vietā ir Null Pointer) un b) izņēmums nekad nav ticis izmests.
public void testFooThrowsIndexOutOfBoundsException() {
Throwable e = null;
try {
foo.doStuff();
} catch (Throwable ex) {
e = ex;
}
assertTrue(e instanceof IndexOutOfBoundsException);
}