web-dev-qa-db-fra.com

Comment puis-je vraiment écrire des tests sans moquer / étirement?

J'utilise TDD lorsque vous développez certains de mes projets latéraux et que je l'aime.

La question, cependant, est que les classes d'encaissement pour les tests d'unités sont une douleur et vous fait craindre de refactoriser.

J'ai commencé à rechercher des recherches et je vois qu'il existe un groupe de personnes qui préconise TDD sans se moquer - les classiques, si je ne me trompe pas.

Cependant, comment puis-je utiliser des tests d'unité pour un morceau de code qui utilise une ou plusieurs dépendances? Par exemple, si je teste une classe UserService qui nécessite UserRepository (parle à la base de données) et UserValidator (valide l'utilisateur), le seul moyen serait .. . Pour les prendre?

Sinon, si j'utilise un vrai UserRepository et UserValidator, cela ne serait pas un test d'intégration et de vaincre le but de tester niquement le comportement de UserService?

Devrais-je écrire uniquement des tests d'intégration lorsqu'il existe une dépendance et des tests unitaires pour des morceaux de code sans dépendance?

Et si oui, comment testerais-je le comportement de UserService? ("Si UserRepository renvoie null, alors UserService doit renvoyer false", etc.)

Merci.

41
kibe

Choisir des collaborateurs est difficile

Il est tout aussi difficile que de travailler le protocole de communication et l'interface entre eux, car il se résume au même problème: faire une frontière.

Si vous écrivez vos tests de l'unité et que vous tirez des collaborateurs réels, vous le faites correctement. Étant donné que les changements dans le protocole/interface nécessitent des changements dans le collaborateur et comme tels que votre simulation/talon.

Si vous écrivez des tests unitaires et que vous fournissez des détails sur la mise en œuvre internes, vous faites la mauvaise chose. Parce que les tests vont se casser simplement en raison d'un refacteur dans l'unité.


Les tests d'unités exploratoires servent à réduire la boucle de rétroaction

Si des tests unitaires ne servent plus ce but, alors (dans leur capacité exploratoire) sont sans valeur.

Il existe de nombreuses façons de fournir la boucle de rétroaction. Si vous êtes tôt dans une conception hypothétique, il peut payer à des tests d'unité de fossé/pas d'écriture, et favorisez plutôt d'autres méthodes d'obtention d'un retour rapide. Ce n'est pas comme si chaque script que vous ayez jamais écrit a un corps de tests étendus.

Cela étant dit, une fois que la conception est réglée, elle paiera pour rédiger des tests d'unité pour le code pour améliorer la qualité et la vérification croisée des fonctionnalités souhaitées.

0
Kain0_0