Πώς μπορώ να χρησιμοποιήσω το JUnit4 για να ελέγξω ότι κάποιος κώδικας πετάει μια εξαίρεση;
Ενώ μπορώ σίγουρα να κάνω κάτι τέτοιο:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Θυμάμαι ότι υπάρχει ένα annotation ή ένα Assert.xyz ή κάτι που είναι πολύ λιγότερο αδέξιο και πολύ περισσότερο στο πνεύμα του JUnit για τέτοιου είδους καταστάσεις.
Το JUnit 4
έχει υποστήριξη για αυτό:
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Αναφορά :
Τι λες γι' αυτό: Πιάστε μια πολύ γενική εξαίρεση, βεβαιωθείτε ότι βγαίνει από το μπλοκ σύλληψης και στη συνέχεια βεβαιωθείτε ότι η κλάση της εξαίρεσης είναι αυτή που περιμένετε να είναι. Αυτός ο ισχυρισμός θα αποτύχει αν α) η εξαίρεση είναι λάθος τύπου (π.χ. αν πήρατε ένα Null Pointer αντί για ένα Null Pointer) και β) η εξαίρεση δεν είχε ποτέ εκτοξευθεί.
public void testFooThrowsIndexOutOfBoundsException() {
Throwable e = null;
try {
foo.doStuff();
} catch (Throwable ex) {
e = ex;
}
assertTrue(e instanceof IndexOutOfBoundsException);
}