Les tests unitaires sont un point central dans un projet informatique; Ils garantissent (en partie) la stabilité du code couvert.
Ils doivent avertir le développeur d'un changement de comportement d’une portion de code. Dans certain cas ce changement est normal car une règle métier a changée;dans d'autre cas cela peut être dû à un impact collatéral sur composant, à priori, sans rapport avec l'évolution qui vient d'être faite.
Avoir une couverture de test unitaire la plus large possible sur l'ensemble du code de notre application permet de se prémunir des régression potentielle.
La famille des outils permettant d'écrire des tests unitaires est assez grande. On y trouve différents frameworks permettant d'adresser l'ensemble des contraintes que l'on peut rencontrer lorsque l'on écrit des tests unitaires.
Dans les applications que nous développons, nous travaillons généralement avec des APIs externes, du code legacy, etc.
Ce type de code, sur lequel nous n’avons pas forcément la main, peut poser des problèmes lors de l’écriture d’un test unitaire dépendant de ces composants.
Dans les bonnes pratiques d’écriture de test unitaire, il faut bouchonner (mocker) tout ce qui n’est pas directement lié au code à tester.
Pour cela, on utilise des frameworks de mock comme :
– EasyMock,
– Mockito,
– JMock.
Ce sont les plus connus. Avec ces outils on pourra bouchonner :
– Tous les composants fournissant une interface,
– Aussi les composants basés sur des classes non finale.
Sur ces bouchons on ajoutera des comportements permettant de positionner un contexte d’exécution au test unitaire cible. Les comportements seront du type :
Lorsque tu appelles telle méthode de ma classe, renvoies moi tel objet
Cette méthode ne jamais être appelée
Cette méthode doit être appelée au moins N fois
Bon c’est un tout petit rappel sur la mission attribuée à un framework de mock.
Malgré les possibilités offertes par ces frameworks, il existe des limitations :
– Mocker une classe déclarée finale,
– Mocker des méthodes déclarées privées,
– Mocker des méthodes statique,
– By-passer le constructeur d’une classe,
– Mocker partiellement une classe.
Toutes ces problématiques sont adressées par PowerMock et de manière très élégante.
En effet, à l’aide de deux annotations, toute la puissance de l’outil se retrouve dans vos tests unitaires et vous évite d’installer pas mal de plomberie pour pouvoir tester dans de bonnes conditions votre code.
PowerMock s’intégre parfaite (des extensions sont proposées) avec EasyMock, Mockito et aussi TestNG.
La dernière release du projet a été faite au mois de mai de cette année.
Le wiki fournit beaucoup de documentation et d’exemples, ce qui permet de prendre l’outil en main très rapidement.
Je pense qu’il apporte un vrai plus dans l’écriture de test unitaire. Il repousse les limites imposées par le langage et permet de rendre nos tests beaucoup plus robuste et exhaustif.
Mettez les bouchons doubles! 🙂
Il existe, dans le même registe, JDave : http://jdave.org/
#java #test #mockito #powermock #mock #test #unitaire