Je tiens à commencer à intégrer des tests unitaires dans mes projets Django et j'ai découvert que l'unité teste une vue pour être délicate à cause de la façon dont Django implémente les vues avec des fonctions. p>
Par exemple, chaque fonction est une vue / page dans Django si la fonction a une URL. P>
Comment puis-je tester des vues Django? P>
3 Réponses :
Je ne sais pas comment tester une vue est délicate.
Vous venez d'utiliser client de test . p>
la couverture de code est facile. Vous avez des raisons de raisonner comment une URL demande mappée sur un chemin de code et apportez les demandes d'URL appropriées. P>
Vous pouvez, si vous le souhaitez, appelez les fonctions de vue "manuellement" en créant un objet de demande et en examinant l'objet de réponse , mais c'est trop de travail. P>
Si vous avez des doutes sur votre couverture de code, c'est une bonne chose. Cela signifie que vous avez du code que vous ne pouvez pas facilement mapper sur une URL (qui est tout un utilisateur peut jamais voir d'une application Web.) Si vous avez du code qui ne correspond pas à une URL, vous devez probablement être (a) supprimer Le code ou (b) le refactue dans un module séparé. P>
Nous avons beaucoup de modules en dehors de nos fonctions de vue. Nos fonctions de vue importent ces modules. Nous testons ces modules "en dehors de la fonction de vue" avec un Âge ordinaire. P>
Voici une structure typique. P>
some_big_product/ |-- __init__.py |-- settings.py |-- urls.py |-- logging.ini |-- other_global_files.py |-- an_app_1/ | |-- __init__.py | |-- urls.py | |-- models.py | |-- views.py | |-- tests.py <-- the generic Django testing | |-- app_specific_module.py | |-- app_specific_package/ | | |-- __init__.py | |-- test_app_specific_module.py <-- unittest | |-- test_app_specific_package.py |-- generic_module.py |-- generic_package/ | |-- __init__.py |-- tests/ | |-- test_this.py | |-- test_that.py | |-- test_all.py <-- not always practical |-- scripts/ |-- run_tests.sh
HMM Cela pourrait répondre à une autre question que j'ai. Comment gérez-vous la structure de répertoire lors de l'ajout d'autres modules dans la hiérarchie du projet Django / app?
Comment pourrait tester_all.py travail? Je suppose que j'aimerais tout obtenir dans un grand testCase.TestSuite, puis l'exécuter. De cette façon, toutes les statistiques de test (passes et échecs) sont agrégées dans une seule sortie à la fin. Je ne peux pas décider si je devrais personnaliser "Manook.py Test" de Django pour exécuter les plus d'informations supplémentaires ou écrire mon propre pignon de test de niveau supérieur intégrant les tests d'unité de Django.
@Tartley: Tout d'abord, essayez le test manage.py de Django's code>. 80% du temps, c'est tout ce dont vous avez besoin. Si vous avez des services Web reposants plus complexes (en tant que serveur et client d'autres services) ou d'autres modules en dehors du cadre «typique» django, vous pouvez constater que vous ne pouvez pas simplement utiliser le cadre de test Django et besoin d'écrire supplémentaire < Code> Unittest code> tests. Dans ce cas, vous êtes
test_all code> invoque Django's d'après et appelle ensuite les tests de l'unité. Ne modifiez pas leur code. Écrivez simplement le script le plus simple que vous puissiez écrire qui utilise la leur et utilise unitest.
Merci pour le conseil M. Lott! Vous avez raison que nous avons commencé à placer des tests en dehors des emplacements habituels que Django recherche des tests (c.-à-d. Un répertoire «Acceptaniques d'acceptation desestts» (tests-fonctionnalités de l'utilisateur visible des utilisateurs qui chevauche des applications de bas niveau) et des tests d'unité de bas niveau qui vivent tous sur le repo, pas seulement dans les applications Django 'Test.py' Script. J'ai piraté un script rapide qui recherche tous les modules de l'arborescence à la recherche de sous-classes de témoins, les met dans une seule suite et le gère. Cela Attrapez des cas de test Django, ainsi que de nos propres tests d'unité non django.
@TArtley: "Script rapide qui recherche tous les modules de l'arborescence à la recherche de sous-classes de TestCase", doit déjà faire partie de Unitest code>. Allez soigneusement ici, car nombre de ces fonctionnalités sont déjà disponibles.
Merci. Je ne peux pas simplement utiliser une découverte unit de la ligne de commande, car les tests Django ont besoin d'une configuration de Django avant d'être invoquées, mais vous avez raison que je devrais probablement utiliser une découverte unittest de mon script. Je voulais le faire moi-même pour que je puisse permettre à l'utilisateur plus de liberté de spécifier le package de test / des noms de module / de classe / de méthode sur la ligne de commande, par ex. Avec un globe global qui correspond à l'un des éléments ci-dessus, mais sur la réflexion, je devrais peut-être utiliser une découverte unit, puis filtrer les résultats de celui-ci. Merci pour la suggestion.
Malheureusement, le lien fourni au client de test ne fonctionne plus. L'emplacement correct est maintenant docs.djangoproject. com / fr / 1.5 / Thèmes / Test / Vue d'ensemble / ...
Vous pouvez essayer TDDSPRY - Collection d'assistants pour tester Django avec des nosetests et Twill . Le nez dispose également de plug-in de couverture qui génèrent de jolis rapports de la couverture. p>