./manage.py test app
À présent..
tests.py
le fichier devient plutôt volumineux/complexe/désordonnétests.py
dans de plus petites collections de tests ...Comment?
Le comportement a changé dans Django 1.6, il n'est donc plus nécessaire de créer un paquet. Nommez simplement vos fichiers test*.py
.
Lorsque vous exécutez vos tests, le comportement par défaut de l'utilitaire de test consiste à rechercher tous les cas de test (c'est-à-dire les sous-classes de unittest.TestCase) dans tout fichier dont le nom commence par test, à créer automatiquement une suite de tests à partir de ces cas de test, et exécutez cette suite.
La découverte de test est basée sur la découverte de test intégrée du module le plus complet. Par défaut, cela découvrira les tests dans n'importe quel fichier nommé "test * .py" sous le répertoire de travail actuel.
Comportement précédent, de Django 1.5 :
Lorsque vous exécutez vos tests, le comportement par défaut de l'utilitaire de test consiste à rechercher tous les cas de test (c'est-à-dire les sous-classes de unittest.TestCase) dans models.py et tests.py, à créer automatiquement une suite de tests à partir de ces cas de test, et exécutez cette suite.
Il existe une deuxième façon de définir la suite de tests pour un module: si vous définissez une fonction appelée suite () dans models.py ou tests.py, le runner de test Django utilisera cette fonction pour construire la suite de tests pour ce module. Ceci suit l'organisation suggérée pour les tests unitaires. Voir la documentation Python pour plus de détails sur la façon de construire une suite de tests complexes.
Notez que cette approche n'est plus valide à partir de Django 1.6, voir ceci post .
Vous pouvez créer un dossier tests
avec ___init___.py
inside (pour qu'il devienne un package). Ensuite, vous y ajoutez vos fichiers .py de test fractionné et les importez tous dans ___init___.py
.
C'est-à-dire: remplacer le test.py
fichier avec un module qui ressemble et agit comme le fichier:
Créez un répertoire tests
sous l'application en question
app app\models.py app\views.py app\tests app\tests\__ init __. py app\tests\bananas.py app\tests\apples.py
Importez les sous-modules dans app\tests\__init__.py
:
from bananas import *
from apples import *
Vous pouvez maintenant utiliser ./manage.py comme s'ils étaient tous dans un seul fichier:
./manage.py test app.some_test_in_bananas
La réponse donnée par Tomasz est correcte. Cependant, il peut devenir fastidieux de s'assurer que les importations en __init__.py
correspond à la structure de votre fichier.
Pour détecter automatiquement tous les tests du dossier vous pouvez l'ajouter dans __init__.py
:
import unittest
def suite():
return unittest.TestLoader().discover("appname.tests", pattern="*.py")
Cela vous permettra d'exécuter ./manage.py test appname
mais ne gère pas l'exécution de tests spécifiques. Pour ce faire, vous pouvez utiliser ce code (également dans __init__.py
):
import pkgutil
import unittest
for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(module_name).load_module(module_name)
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase):
exec ('%s = obj' % obj.__name__)
Vous pouvez maintenant exécuter tous vos tests via manage.py test app
ou spécifiques via manage.py test app.TestApples
Créez simplement votre structure de répertoire comme ceci:
myapp/
__init__.py
tests/
__init__.py
test_one.py
test_two.py
...
...
Et python manage.py test myapp
fonctionnera comme prévu.
http://docs.python.org/library/unittest.html#organizing-tests parle de diviser les fichiers en modules, et la section juste au-dessus contient un exemple.
Si vous avez une configuration plus compliquée ou si vous ne souhaitez pas utiliser from ... import *
- instructions de type, vous pouvez définir une fonction appelée suite
dans votre tests.py (ou tests/__ init__.py), qui retourne une instance de unittest.TestSuite
.
Avec Django 2.2 une solution simple et assez bonne pourrait être de créer un dossier test
dans une application, et vous pouvez mettre vos fichiers test_...py
Associés dans, juste ajoutez __init__.py
au dossier test
.
Pas besoin de coder quoi que ce soit en init. Créez simplement un sous-répertoire dans votre application. La seule exigence est pour ne pas l'appeler tests * Par exemple
app/
app/__init_.py
app/serializers.py
app/testing/
app/testing/__init__.py
app/testing/tests_serializers.py
Je pense ./manage.py test
exécute simplement toutes les astuces de test (dans Django> = 1.7).
Si votre organisation des tests concerne le regroupement et cherrypicking et vous êtes fan de nose
use Django nose :
python manage.py test another.test:TestCase.test_method
Si vous connaissez le nez, vous savez comment "joker" beaucoup plus agréable sur tous vos fichiers.
PS
C'est juste une meilleure pratique. J'espère que ça t'as aidé. La réponse a été empruntée à partir d'ici: Exécution d'un cas de test spécifique dans Django lorsque votre application a un répertoire de tests