Je l'ai déjà vérifié ce .. similar question mais je ne suis pas convaincu les réponses ...Existe-t-il un moyen d'écrire des tests pour une interface, puis de la tester par rapport à toutes les classes qui implémentent le test?
J'ai actuellement une interface qui est uniquement mis en œuvre par une classe, mais qui va changer tôt ou tard. J'ai actuellement un test sur l'interface, et tous les tests au début commence par:
IFoo foo = GetConcreteFoo()
où GetConcreteFoo est quelque chose comme
IFoo GetConcreteFoo()
{
return new ConcreteFooA();
}
cependant, pourrait quand je reçois plus implémentations de Foo être un moyen de faire tout le test contre une liste de tous les différents foos de béton? Im pensant que s'il n'y a aucun moyen, au moins je peux copier/coller le test dans un nouveau fichier, avec le nom du concreteclass, et changer l'objet de retour du GetConcreteFoo ... (et en changeant le fichier d'origine (de IFooTests à IConcreteFooATests).
Je ne pense pas que cette méthode est particulièrement mauvaise .. mais son pas trop élégant/intelligent, car il serait d'exécuter le même test (fichier) contre toutes les implémentations concrètes.
est-il un moyen de faire faire?
(Im en utilisant MSTests)
Merci!
+1 Globalement, une bonne réponse, mais faire ce genre de test d'intégration peut aussi être utile en tant que suite de tests de régression. Une autre chose est que si vous avez une interface qui implique des «garanties sémantiques en dehors de la spécification de l'interface», c'est un candidat idéal pour une classe abstraite au lieu d'une interface. –
Oui l'interface implique une garantie sémantique, puisque c'est pour un Repository où, indépendamment de l'implémentation, getAll obtient tout, Add ajoute un nouvel élément, Update mettra à jour un élément, etc. La méthode devrait toujours avoir les mêmes résultats testables, indépendamment de la mise en œuvre. Dois-je en faire une classe abstraite? Si je le fais, je dois encore tester contre toutes les implémentations. Bien que parler de tests paramétrés m'a fait réfléchir sur PEX, je vais vérifier cela aussi. –