Je commence à croire que le test unitaire d'un code de haut niveau, bien écrit, qui nécessite une utilisation intensive d'objets fantaisie, a peu ou pas de valeur. Je me demande si cette affirmation est correcte, ou si quelque chose m'échappe ?
Qu'est-ce que j'entends par haut niveau ? Ce sont les classes et les fonctions situées au sommet de la chaîne alimentaire. Leurs entrées et sorties sont généralement des entrées utilisateur et des interfaces utilisateur. La plupart de leur travail consiste à prendre l'entrée de l'utilisateur et à faire une série d'appels à des entités de niveau inférieur. Elles ont souvent peu ou pas de valeurs de retour significatives.
Qu'est-ce que j'entends par "bien écrit" ? Dans ce cas, je fais référence à un code qui est découplé de ses dépendances (à l'aide d'interfaces et d'injection de dépendances) et qui, ligne par ligne, se situe à un niveau d'abstraction cohérent. Il n'y a pas d'algorithmes délicats, et peu de conditionnels.
I déteste écrire des tests unitaires pour ce type de code. Les tests unitaires consistent presque entièrement en la configuration d'objets fantaisie. Ligne par ligne, le test unitaire se lit presque comme une image miroir de l'implémentation. En fait, j'écris les tests unitaires en regardant l'implémentation. "D'abord j'affirme que cette méthode mock est appelée, ensuite j'affirme que cette méthode mock est appelée...", etc. Je devrais tester le comportement de la méthode, et non pas vérifier qu'elle appelle la bonne séquence de méthodes. . Autre chose : j'ai constaté que ces tests sont extrêmement fragile au remaniement . Si un test est si fragile qu'il se brise complètement et doit être réécrit lorsque le code testé est remanié, alors n'a-t-on pas perdu l'un des principaux avantages des tests unitaires ?
Je ne veux pas que ce message soit considéré comme argumentatif, ou comme une question. Je vais donc formuler ma question directement : Quelle est la manière correcte de tester unitairement le type de code que j'ai décrit, ou est-il entendu que tout n'a pas besoin d'un test unitaire ?