Organisation des tests unitaires Django

En ce moment, mes tests unitaires Django vivent à mcif/tests.py . Je préférerais avoir quelque chose de plus comme mcif/tests/foo_test.py , mcif/tests/bar_test.py , etc., mais si mcif/tests/bar_test.py mes tests de cette façon, Django se détache.

Est-il possible de faire ce que j’essaie de faire ou dois-je avoir tous mes tests dans un seul fichier?

À partir de la version 1.6 de Django, le mécanisme de découverte de test a changé. Vous n’avez plus besoin d’importer tout depuis tests/__init__.py , mais vous devez maintenant vous assurer que tous vos fichiers contenant des tests correspondent au test*.py modèle test*.py .

Donc, au lieu d’avoir app/tests/models.py et app/tests/views.py , vous devriez maintenant avoir app/tests/test_models.py et app/tests/test_views.py .

Vous pouvez également créer un fichier nommé app/tests/test.py et y inclure vos autres fichiers. La chose est que le coureur cherchera les fichiers correspondant au test*.py modèle test*.py et les exécutera.

Remarque: Ceci décrit le comportement avant Django 1.6. Voir la réponse d’Artur Soler pour Django 1.6 et versions ultérieures .

Créer un paquetage: myapp/tests/

Dans le paquet, mettez autant de modules de test différents que vous le souhaitez. Dans __init__.py dans les tests , importez les tests de ces modules. (Ou une variation sur ce thème.)

edit: Wow, vous n’avez pas déjà mentionné un paquet de tests .

L’important est que tout soit disponible dans le package. Django va obtenir les tests du paquet, ils doivent donc être visibles dans __init__.py .

[edit: note sur Django version 1.6]

Dans votre __init__.py mettez quelque chose comme:

 from foo_test import * from bar_test import * 

Juste pour append à la grande réponse d’ Artur Soler …

Vous pouvez également utiliser l’option --pattern pour spécifier le nom de vos fichiers de test.

Par exemple, si vos fichiers de test sont nommés foo_test.py , bar_test.py et similaires, vous pouvez utiliser:

 $ ./manage.py test --pattern="*_test.py"