Comment doit-tests unitaires seront-ils documentés?
Je suis en train d'améliorer le nombre et la qualité des tests dans mon Python projets. L'une des difficultés que j'ai rencontrées, le nombre de tests augmentation est de savoir ce que chaque test fait et comment il est censé aider à déceler les problèmes. Je sais que de garder la trace des tests est mieux de test de l'unité de noms (qui a été abordée d'ailleurs), mais je suis également intéressé à la compréhension de la façon dont la documentation et les tests unitaires vont de pair.
Comment peut-tests unitaires être documentées afin d'améliorer leur utilité lors de ces tests échoue dans l'avenir? Plus précisément, ce qui fait un bon test de l'unité docstring?
Je vous en serais reconnaissant à la fois descriptives des réponses et des exemples de tests unitaires avec une excellente documentation. Bien que je travaille exclusivement avec Python, je suis ouvert à des pratiques à partir d'autres langues.
Vous devez vous connecter pour publier un commentaire.
I document de plus sur mes tests unitaires avec le nom de la méthode exclusivement:
Pour presque 100% de mes tests, celui-ci explique clairement ce que l'unité de test est de valider et c'est tout ce que j'utilise. Cependant, dans quelques-uns des plus compliqué cas de test, je vais ajouter quelques commentaires tout au long de la méthode d'expliquer ce que plusieurs lignes sont en train de faire.
J'ai vu un outil d'avant (je crois que c'était pour Ruby), qui permettrait de générer des fichiers de la documentation de l'analyse des noms de tous les cas de test dans un projet, mais je ne me souviens pas le nom. Si vous avez eu des cas de test pour un jeu d'échecs de la Reine de la classe:
l'outil serait de générer un rapport HTML doc avec un contenu à quelque chose comme ceci:
test_
. J'utilise nosetest, cependant, qui dépend du mot "test" pour apparaître dans le nom de la méthode pour son unité de test de la découverte. somethingaboutorange.com/mrl/projects/nose/0.11.1Peut-être le problème n'est pas dans la meilleure façon d'écrire de test docstrings, mais la façon d'écrire les tests eux-mêmes? Refactoring des tests de telle manière qu'ils sont auto documentation peut aller un long chemin, et votre docstring ne sera pas à jour lors de la modification de code.
Il y a quelques choses que vous pouvez faire pour rendre les tests plus clair:
Par exemple, si vous avez un test comme ceci:
Vous pouvez remplacer la configuration des énoncés à un appel de méthode:
Noter que la méthode de test est maintenant composé d'une série d'appels de méthode avec l'intention de révéler les noms, une sorte de DSL spécifiques à votre tests. Fait un test comme ça encore besoin de documentation?
Une autre chose à noter est que votre méthode de test est principalement à un niveau d'abstraction. Quelqu'un de lire la méthode de test sera de voir l'algorithme est:
Leur compréhension de la méthode d'essai n'est pas souillé par les détails de la mise en place du widget, qui est un niveau d'abstraction plus bas que la méthode de test.
La première version de la méthode d'essai qui suit l' Inline Installation modèle. La deuxième version suit Méthode De Création De et Installation Déléguée modèles.
En général, je suis contre les commentaires, sauf lorsqu'ils expliquer le "pourquoi" du code. La lecture de l'Oncle Bob Martin Code Propre m'a convaincu de cela. Il y a un chapitre sur les commentaires, et il y a un chapitre sur les tests. Je le recommande.
Pour en savoir plus sur les tests automatisés de meilleures pratiques, ne consultez xUnit Modèles.
Le nom de la méthode d'essai doit décrire exactement ce que vous testez. La documentation doit dire ce qui rend le test échoue.
Vous devez utiliser une combinaison de la méthode descriptive des noms et des commentaires dans la doc de la chaîne. Une bonne façon de le faire est, y compris une procédure de base et les étapes de vérification dans la doc de la chaîne. Alors si vous exécutez ces tests, une sorte de framework de test qui permet d'automatiser l'exécution des tests et de la collecte des résultats, vous pouvez demander le cadre du journal le contenu de la doc de chaîne pour chaque méthode de test avec son stdout+stderr.
Voici un exemple de base:
Avoir la procédure avec le test, il est beaucoup plus facile de comprendre ce que le test est en train de faire. Et si vous incluez la docstring avec la sortie du test, il permet de déterminer ce qui s'est passé lors du passage à travers les résultats par la suite beaucoup plus facile. Le dernier lieu, j'ai travaillé à fait quelque chose de ce genre et il a fonctionné très bien quand échecs. Nous avons couru les tests unitaires sur chaque checkin automatiquement, à l'aide de CruiseControl.
Lorsque le test échoue (ce qui devrait être avant qu'il ne passe jamais), vous devriez voir le message d'erreur et être en mesure de dire ce qui est. Que se produit uniquement si vous prévoyez de cette façon.
C'est entièrement une question de la désignation de la classe de test, la méthode d'essai, et le message d'assertion. Lorsqu'un test échoue, et vous ne pouvez pas dire ce qui est à partir de ces trois indices, puis renommer certaines choses ou de briser certaines classes de tests.
Il ne se produit pas si le nom de l'appareil est ClassXTests et le nom de l'essai est de TestMethodX et le message d'erreur est "attendu vrai, retourné false". C'est un signe de sloppy test écrit.
La plupart du temps vous ne devriez pas avoir à lire le test ou des commentaires pour savoir ce qui s'est passé.