Le code dupliqué est une odeur dans l'unité de test de code, tout autant que dans un autre code. Si vous avez le code dupliqué dans les tests, il est plus difficile de refactoriser le code d'implémentation parce que vous avez un nombre disproportionné de tests de mise à jour. Les Tests devraient vous aider à refactoriser avec confiance, plutôt que d'être un grand fardeau qui empêche votre travail sur le code testé.
Si la duplication est dans le gabarit mis en place, envisager de faire davantage usage de la setUp
méthode ou de fournir plus (ou plus souple) Méthodes de Création.
Si la duplication est dans le code de la manipulation de la CUS, puis demandez-vous pourquoi plusieurs soi-disant "unité" des tests sont l'exercice de la exactement la même fonctionnalité.
Si la duplication est dans les affirmations, alors peut-être vous avez besoin de quelques Assertions Personnalisées. Par exemple, si plusieurs tests ont une chaîne d'affirmations comme:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
Alors peut-être vous avez besoin d'un seul assertPersonEqual
méthode, de sorte que vous pouvez écrire assertPersonEqual(Person('Joe', 'Bloggs', 23), person)
. (Ou peut-être vous avez simplement besoin de la surcharge de l'opérateur d'égalité sur Person
.)
Comme vous le mentionnez, il est important que le code de test pour être lisible. En particulier, il est important que l' intention d'un test, c'est clair. Je trouve que si de nombreux tests de look pour la plupart les mêmes, (par exemple, les trois quarts des lignes les mêmes ou presque les mêmes), il est difficile de repérer et de reconnaître les différences significatives, sans le lire soigneusement et de les comparer. Donc, je trouve que le refactoring pour supprimer la duplication permet de lisibilité, car chaque ligne de chaque méthode de test est directement pertinent pour l'objectif du test. C'est beaucoup plus utile pour le lecteur qu'une combinaison aléatoire de lignes qui sont directement pertinents, et que les lignes sont juste des passe-partout.
Cela dit, parfois, les tests sont l'exercice de situations complexes qui sont identiques, mais encore sensiblement différents, et il est difficile de trouver un bon moyen de réduire la duplication. Utilisez votre bon sens: si vous vous sentez les tests sont lisibles et faire leurs intentions claires, et vous êtes à l'aise avec peut-être besoin de mettre à jour plus de théorie à un nombre minimal de tests lors d'un refactoring du code invoquée par les tests, puis d'accepter l'imperfection et de passer à quelque chose de plus productif. Vous pouvez toujours revenir et refactoriser les tests plus tard, quand l'inspiration est là!