Je teste une méthode qui consiste à générer une collection d'objets de données. Je veux vérifier que les propriétés des objets sont définies correctement. Certaines propriétés seront définies sur la même chose; d'autres seront définis sur une valeur qui dépend de leur position dans la collection. La façon naturelle de le faire semble être une boucle. Cependant, Roy Osherove déconseille fortement d'utiliser la logique dans les tests unitaires ( Art of Unit Testing , 178). Il dit:
Un test qui contient de la logique teste généralement plus d'une chose à la fois, ce qui n'est pas recommandé, car le test est moins lisible et plus fragile. Mais la logique de test ajoute également de la complexité qui peut contenir un bogue caché.
Les tests doivent, en règle générale, être une série d'appels de méthode sans flux de contrôle, pas même
try-catch
, et avec des appels d'assertion.
Cependant, je ne vois rien de mal dans ma conception (comment générer autrement une liste d'objets de données, dont certaines valeurs dépendent de leur emplacement dans la séquence? - je ne peux pas exactement les générer et les tester séparément). Y a-t-il quelque chose qui ne respecte pas les tests dans ma conception? Ou suis-je trop attaché à l'enseignement d'Osherove? Ou y a-t-il une magie secrète de test unitaire que je ne connais pas qui contourne ce problème? (J'écris en C # / VS2010 / NUnit, mais je recherche des réponses indépendantes du langage si possible.)
in
) nécessaire, si le test est "Frob a été ajouté avec succès à une collection existante".
toString()
la collection et de la comparer à ce qu'elle devrait être. Simple et fonctionne.