284 votes

Préféré Python unité cadre de tests de

Jusqu'à présent, j'ai été en utilisant le construit-dans le module unittest (pyUnit) pour l'unité de test de code Python. Toutefois, pour les cas simples, il semble exagéré. Étant un dérivé de xUnit, il semble un peu lourd pour la nature dynamique de Python, où je m'attends à écrire moins pour obtenir les mêmes effets. D'autre part, il est intégré, il vous fait écrire vos tests, de manière organisée, et il est testé par le temps.

Les principales options que j'ai vu en ligne sont:

Qui de la les cadres préférez-vous, et pourquoi?


Mise à jour 10.12.2011: avec l'ajout récent de test de détection automatique et de nombreuses nouvelles fonctionnalités en unittest (en Python 2.7 et 3.2), à mon humble avis il fait moins de sens d'utiliser une bibliothèque externe.


Concernant doctest: Je ne considère pas ça un test unitaire cadre per se. Je certainement ne voudrais pas l'utiliser pour écrire une grande suite de tests pour une importante demande. doctest est plus approprié pour s'assurer que les exemples que vous fournissez dans le travail de documentation. Il a sa place pour ce besoin, mais il n'est pas un concurrent pour unittest, py.test et d'autres cadres.

133voto

Kozyarchuk Points 4613

nose n'est pas vraiment un framework de test unitaire. C'est un test runner et une grande. Il peut exécuter des tests créés à l'aide de pyUnit, py.test ou doctest.

Ma préférence pour le framework de test unitaire est pyUnit. Il est similaire à d'autres frameworks xUnit et il est facile de se rapporter à des personnes sans python à l'arrière-plan. Il est également très bon appui dans Eclipse/PyDev

Sur py.test, j'ai trouver plusieurs niveaux de configuration/teardowns très déroutant. Je trouve aussi qu'il conduit à une très structurées et non dur à lire les tests unitaires.

doctest est OK pour les choses simples, mais je trouve que c'est très restrictive et n'est pas vraiment à l'échelle de complexe et hautement interactif code.

99voto

pfctdayelise Points 1736

Intéressant de noter que personne n'a encore répondu à défendre py.test. Sur le test-en-python liste de diffusion , il est très populaire, par exemple, cette récente fil "pourquoi utilisez-vous py.test?". La plupart des réponses communes inclus:

  • facilite la prise en charge pour les tests distribués
  • une bonne architecture de plugin
  • plus facile assertions (juste assert x == 42, n assertEqual())
  • funcargs

41voto

Vandana Gopal Points 181

Nous avons commencé notre automation cadre à l'aide de unittest et nosetest. Nous sous-classé tous nos classes de test de unittest depuis unittest offre une grande syntaxe pour les assertions. Pour l'exécution des tests, nous avons utilisé le nez qui est assez bonne en termes de reporting et de la spécification des tests nécessaires pour l'exécuter. La génération de tests de logique a également été très bonne à l'aide de la méthode du rendement, il est facile à utiliser. Le seul problème avec le nez de génération de test, c'est que le test de la classe ne peut hériter de unittest - la génération de test échoue, alors. Seulement le nez assertions peuvent être utilisées ici.

Nous avons rencontré de gros problèmes avec le nez quand nous voulions pour paralléliser le test s'exécute. Extrêmement vissé en place des rapports s'est produit lorsque les tests ont été exécutés en parallèle. Aussi, si vous êtes à la création de certaines ressources dans les méthodes de configuration puis aussi la parallélisation échoue avec des erreurs étranges. Il semblait très complexe à utiliser le nez pour paralléliser les essais - nous avons essayé presque tout. Alors, finalement, un des membres de notre équipe frapper sur py.test. Dans un très court laps de temps il a été en mesure d'apporter les changements nécessaires à une suite de 30 tests afin de les exécuter en parallèle. Il a commencé à l'exécuter et à sa grande surprise, la course passée dans un enregistrement de 15 minutes à partir de la précédente de 75 minutes, il sert à prendre. Il a été en mesure d'exécuter toutes les 30 tests en parallèle avec succès avec moins d'effort et sans tracas. La syntaxe est simple et à la présentation était superbe - loin surpassé les rapports du nez cadre.

Donc je dirais que la combinaison de réussite est py.test avec unittest.

17voto

John Millikin Points 86775

Je viens d'utiliser la norme unittest. Vous ne savez pas comment vous voulez écrire des tests de manière aussi efficace avec un autre style, peut-être que chaque test dans une fonction, mais alors, comment voulez-vous gérer le programme d'installation / démontage?

9voto

S.Lott Points 207588

L' unittest.TestCase est une classe. Hésitez pas à la sous-classe avec vos propres add-on des fonctionnalités qui vous permettent de vous "écrivez moins pour obtenir les mêmes effets".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X