Comment utiliser Hamcrest en Java pour tester une exception?

Comment puis-je utiliser Hamcrest pour tester une exception? Selon un commentaire en https://code.google.com/p/hamcrest/wiki/Tutorial, "la gestion des exceptions est fourni par Junit 4 à l'aide de l'attendu de l'attribut."

J'ai donc essayé et constaté que cela a fonctionné:

public class MyObjectifyUtilTest {

    @Test
    public void shouldFindFieldByName() throws MyObjectifyNoSuchFieldException {
        String fieldName = "status";
        String field = MyObjectifyUtil.getField(DownloadTask.class, fieldName);
        assertThat(field, equalTo(fieldName));
    }

    @Test(expected=MyObjectifyNoSuchFieldException.class)
    public void shouldThrowExceptionBecauseFieldDoesNotExist() throws MyObjectifyNoSuchFieldException {
        String fieldName = "someMissingField";
        String field = MyObjectifyUtil.getField(DownloadTask.class, fieldName);
        assertThat(field, equalTo(fieldName));      
    }

}

Ne Hamcrest fournir toute fonctionnalité supplémentaire au-dessus et au-delà de la @Test(expected=...) d'annotation à partir d'JUnit?

Alors que quelqu'un a demandé à ce sujet dans Groovy (Comment utiliser Hamcrest pour tester exception?), ma question est pour les tests unitaires écrits en Java.

Heh, bien SÛR, JUnit n'est pas encore bien établie moyen de vérifier qu'une opération spécifique jette...manque de la programmation fonctionnelle, la faute (avant Java 8, qui est)
Vous pouvez avoir un coup d'oeil à la assertj bibliothèque qui dispose d'un élégant api pour faire valoir contre exceptions: joel-costigliola.github.io/assertj/... Exemple: assertThatThrownBy(() -> { throw new Exception("boom!"); }).isInstanceOf(Exception.class);

OriginalL'auteur Michael Osofsky | 2014-12-31