Je suis actuellement en train de préparer le terrain pour une application ASP.Net MVC et j'examine le type de tests unitaires que je devrais être prêt à écrire. J'ai vu à plusieurs endroits des gens dire essentiellement `` ne vous embêtez pas à tester vos points de vue, il n'y a pas de logique et c'est trivial et sera couvert par un test d'intégration ''.
Je ne comprends pas comment cela est devenu la sagesse acceptée. Les tests d'intégration ont un objectif entièrement différent des tests unitaires. Si je casse quelque chose, je ne veux pas savoir une demi-heure plus tard quand mes tests d'intégration se cassent, je veux savoir immédiatement.
Exemple de scénario: disons que nous avons affaire à une application CRUD standard avec une entité client. Le client a un nom et une adresse. À chaque niveau de test, je veux vérifier que la logique de récupération du client obtient correctement le nom et l'adresse.
Pour tester unitaire le référentiel, j'écris un test d'intégration pour frapper la base de données. Pour tester les règles métier de façon unitaire, je moque le référentiel, alimente les données appropriées des règles métier et vérifie que mes résultats attendus sont renvoyés.
Ce que j'aimerais faire: Pour tester l'unité de l'interface utilisateur, je moque les règles métier, configure mon instance client attendue, rend la vue et vérifie que la vue contient les valeurs appropriées pour l'instance que j'ai spécifiée.
Ce que je suis bloqué: pour tester unitaire le référentiel, j'écris un test d'intégration, configure une connexion appropriée, crée les données requises dans la base de données, ouvre un navigateur, navigue vers le client et vérifie que la page résultante contient les informations appropriées valeurs pour l'instance que j'ai spécifiée.
Je me rends compte qu'il existe un chevauchement entre les deux scénarios discutés ci-dessus, mais la principale différence est le temps et les efforts requis pour configurer et exécuter les tests.
Si je (ou un autre développeur) supprime le champ d'adresse de la vue, je ne veux pas attendre que le test d'intégration le découvre. Je veux est découvert et signalé dans un test unitaire qui est effectué plusieurs fois par jour.
J'ai l'impression que je ne saisis tout simplement pas un concept clé. Quelqu'un peut-il expliquer pourquoi vouloir une rétroaction immédiate sur la validité d'une vue MVC est une mauvaise chose? (ou si ce n'est pas mauvais, alors ce n'est pas la façon attendue d'obtenir ces commentaires)
"To unit-test the repository, I write an integration test"
Attends quoi? Ce n'est pas un test unitaire du référentiel. Vous automatisez le test pour cela, mais le code sous test inclut toujours le DAL et la base de données. Pour tester le référentiel unitaire, vous l'avez isolé comme vous l'avez fait pour vos règles métier.