Un vrai projet m'a montré qu'il n'est pas possible d'écrire des tests unitaires, puis l'intégration et même la direction opposée est erronée :-) Donc, j'écris habituellement des tests unitaires avec ceux d'intégration.
Pourquoi? Permettez-moi d'écrire comment je vois les deux types de tests:
Tests unitaires - En plus de Wikipédia et de toutes les informations connues, les tests unitaires vous aident à affiner votre conception , à améliorer votre modèle, vos relations. Le flux est simple: une fois que vous commencez à taper un nouveau projet / nouveau composant, la plupart du temps, vous créez une sorte de PoC . Lorsque vous avez terminé, vous disposez toujours de méthodes longues, de classes longues, de méthodes et classes non cohérentes, etc.
Les tests unitaires vous aident à supprimer ces problèmes, car lorsque vous effectuez de véritables tests unitaires à l'aide de classes factices (sans dépendance à l'égard d'autres composants) décrites ci-dessus, il n'est pas possible de les tester. Le signe de base du code non testable est une grande partie moqueuse des tests car vous êtes obligé de vous moquer de nombreuses dépendances (ou situations)
Tests d'intégration - des tests corrects et fonctionnels vous disent que votre nouveau composant (ou composants) fonctionne ensemble ou avec d'autres composants - c'est la définition habituelle. J'ai trouvé que les tests d'intégration vous aident principalement à définir le flux comment utiliser votre composant du côté des consommateurs .
C'est vraiment important car cela vous dit parfois que votre API n'a pas de sens de l'extérieur.
Eh bien, que se passe-t-il une fois que j'ai écrit les tests unitaires et les tests d'intégration plus tard?
J'ai eu de belles classes, une conception claire, un bon constructeur, des méthodes courtes et cohérentes, IoC prêt, etc. , bizarre. Il était juste confus. J'ai donc réparé l'API selon son point de vue mais cela a également nécessité de réécrire de nombreux tests car j'ai été poussé à changer les méthodes et parfois même le flux comment utiliser l'API.
Eh bien, que se passe-t-il une fois que j'ai écrit les tests d'intégration et les tests unitaires plus tard?
J'ai un débit exact, une bonne convivialité. Ce que j'ai aussi, ce sont de grandes classes, du code non cohérent, pas de journalisation, de longues méthodes. Code de spaghetti
Quel est mon conseil?
J'ai appris le flux suivant:
- Développer le squelette de base de votre code
- Écrivez des tests d'intégration qui indiquent si cela a du sens du point de vue du consommateur. Le cas d'utilisation de base est suffisant pour l'instant. Le test ne fonctionne évidemment pas.
- Écrivez du code avec des tests unitaires pour chaque classe.
- Écrivez le reste / manque des tests d'intégration. Il serait préférable d'implémenter ces tests dans # 3 comment vous améliorez votre code.
Notez que j'ai fait une petite présentation sur les tests unitaires / d'intégration, voir la diapositive # 21 où le squelette est décrit.