Skip navigation

Voilà un moment que je cherche une solution élégante pour tester unitairement mon application Spring. La problématique que je cherche à résoudre est la suivante :

-          Pouvoir injecter des mocks et effectuer des assertions dessus dans le test.

-          Pour une même classe/interface avoir des instances différentes selon les tests (implémentation concrète dans un test, mock dans l’autre) ;

-          Que la solution fonctionne avec un component-scan (legacy code…) ;

-          Que la solution soit simple, élégante, lisible, peu intrusive et ne nécessite pas 20 lignes de codes à chaque test…

-          Qu’elle fonctionne avec les annotations Spring et les configurations Java…

La première solution que j’ai trouvée a été Springockito-Annotations. Comme vous pouvez le voir sur le lien la solution est plutôt simpliste, lisible, et elle fonctionne. Mais cette librairie semble peu maintenue, avec beaucoup de choses qui sont à l’état expérimental. J’avai un peu peur de baser toute mon application sur cette librairie. Trop de bugs ouverts non résolus, faible reactivité du développeur, … C’est définitivement une bonne librairie (ne vous y méprenez pas) mais je ne pouvais pas prendre le risque. J’ai donc cherché une autre solution, plus pérenne, qui a mis du temps à éclore mais j’ai enfin trouvé une solution stable (à mes yeux), et suffisamment simple pour que d’autres développeurs l’utilisent sur le projet. Elle est tellement simple qu’elle pourra vous paraitre évidente mais j’ai mis tellement de temps à la trouver, j’espère qu’elle vous aidera (le projet complet sur Github) :