java code

JUnit : Tester une exception

Aujourd’hui j’ai appris deux, trois petites astuces sur JUnit. Par exemple, l’utilisation de l’annotation @Ignore ou encore la possibilité de tester le déclenchement d’une Exception.

Ces « nouveautés » sont disponibles depuis la version 4 de JUnit si je ne trompe pas (donc oui, ça remonte à quelques temps déjà mais on en apprend tous les jours n’est-ce pas ^^). Commençons par l’annotation @Ignore. Imaginez que vous êtes en train d’écrire des tests pour une classe. Vous pensez à certains tests qui ne peuvent pas encore être réalisés car la classe n’est pas terminée. Au lieu de commenter tout le test comme un sagouin, vous décidez d’annoter ce test avec la mention @Ignore pour empêcher qu’il ne soit exécuté lors de l’exécution de vos tests unitaires ^^!

@Test
@Ignore("need to write myMethod() first")
public void testMyMethod() {
     ...
}

Vous remarquerez qu’il est possible de renseigner un message indiquant le pourquoi de la présence de @Ignore.

Un de mes collègues m’a fait remarquer qu’il était tout aussi facile de retirer l’annotation @Test pour empêcher l’exécution de celui-ci. C’est juste. Ça peut aussi fonctionner comme ça. Mais je trouve plus  logique de conserver l’annotation Test. En effet, si la méthode de test n’est pas nommée de façon assez explicite, il est possible qu’un autre développeur qui n’avait jamais lu cette classe de test auparavant oublie de remettre l’annotation @Test et oublie ce dernier. D’accord, il suffit de lire le contenu pour chercher une assertion. Néanmoins, c’est le genre d’erreur qui peut arriver si la classe contient plus d’une vingtaine de tests :).

Passons au test d’exception. Il peut arriver que vous ayiez envie ou besoin de tester si la méthode que vous avez écrite déclenche bien une exception dans un cas particulier. Voici comment   écrire ce test:

@RunWith(JUnit4.class)
public class DummyTest {

	@Rule
	public ExpectedException exception = ExpectedException.none();

	@Test
	public void testMyMethodThrowsMyException() throws MyException {
		exception.expect(MyException.class);
		myMethod(input);
	}

}

Pour que ce test soit validé, il faut que la méthode myMethod(input) déclenche une exception de type MyException.  Vous pouvez également faire un test sur le message retourné par l’exception en utilisant exception.expectMessage(« myExpectedMessage »).

Bon code =) !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *