Le comportement a changé dans Django 1.6, il n'est donc plus nécessaire de créer un package. Nommez simplement vos fichiers test*.py
.
Depuis la documentation Django 1.7
Lorsque vous exécutez vos tests, le comportement par défaut de l'utilitaire de test est de trouver tous les cas de test (c'est-à-dire les sous-classes de unittest.TestCase) dans tout fichier dont le nom commence par test, de créer automatiquement une suite de tests à partir de ces cas de test, et exécutez cette suite.
À partir de la documentation Django 1.6 ,
La découverte de test est basée sur la découverte de test intégrée du module unittest. 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, issu de la documentation Django 1.5 :
Lorsque vous exécutez vos tests, le comportement par défaut de l'utilitaire de test est de trouver tous les cas de test (c'est-à-dire les sous-classes de unittest.TestCase) dans models.py et tests.py, de 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 lanceur de tests Django utilisera cette fonction pour construire la suite de tests pour ce module. Cela suit l'organisation suggérée pour les tests unitaires. Consultez la documentation Python pour plus de détails sur la construction d'une suite de tests complexe.
test*.py
fichiers dans un dossier appelétests
pour garder le dossier propre - c'est possible, mais vous devez exécuter./manage.py test app.tests
et toutes les importations relatives doivent monter d'un niveau (from .models
devientfrom ..models
).Notez que cette approche n'est plus valable depuis Django 1.6, voir ce post .
Vous pouvez créer un
tests
dossier 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
.Ie: Remplacez le
test.py
fichier par un module qui ressemble et agit comme le fichier:Créer un
tests
répertoire sous l'application en questionImportez les sous-modules dans
app\tests\__init__.py
:Vous pouvez désormais utiliser ./manage.py comme s'ils étaient tous dans un seul fichier:
la source
python manage.py test myapp
alors en fait cette réponse fonctionne très bien. (juste essayé)La réponse donnée par Tomasz est correcte. Cependant, il peut devenir fastidieux de s'assurer que les importations en
__init__.py
correspondent à votre structure de fichiers.Pour détecter automatiquement tous les tests dans le dossier, vous pouvez ajouter ceci dans
__init__.py
:Cela vous permettra d'exécuter
./manage.py test appname
mais ne gérera pas l'exécution de tests spécifiques. Pour ce faire, vous pouvez utiliser ce code (également dans__init__.py
):Vous pouvez maintenant exécuter tous vos tests via
manage.py test app
ou des tests spécifiques viamanage.py test app.TestApples
la source
__init__.py
sys.modules[packagename]
. Une solution de contournement rapide consiste àdel
tout ce qui pose des problèmes après ce qui précède. (Ou vous pouvez renommer vos dossiers;))python manage.py test appName
), le deuxième bit de code lèverait une erreur indiquant qu'il__path__
n'était pas disponible. Je l'ai évité en enveloppant le deuxième extrait de code dans unif '__path__' in locals():
chèque, ce qui a fait l'affaire. Merci d'avoir répondu!Créez simplement votre structure de répertoires comme ceci:
Et
python manage.py test myapp
fonctionnera comme prévu.la source
http://docs.python.org/library/unittest.html#organizing-tests parle de la division des fichiers en modules, et la section juste au-dessus contient un exemple.
la source
Pas besoin de coder quoi que ce soit dans init. Créez simplement un sous-répertoire dans votre application. La seule exigence est de ne pas l'appeler tests * Par exemple
la source
Avec Django 2.2, une solution simple et assez bonne pourrait être de créer un
test
dossier dans une application, et vous pouvez y placer vostest_...py
fichiers associés , il suffit de les ajouter__init__.py
autest
dossier.la source
Si vous avez une configuration plus compliquée ou si vous ne souhaitez pas utiliser d'
from ... import *
instructions -type, vous pouvez définir une fonction appeléesuite
dans votre tests.py (ou tests / __ init__.py), qui renvoie une instance deunittest.TestSuite
.la source
Je pense qu'il
./manage.py test
suffit d'exécuter toutes les astuces de tests (dans django> = 1.7).Si vos tests d'organisation concernent le regroupement et le cherrypicking et que vous êtes fan de l'
nose
utilisation du nez de django :Si vous connaissez le nez, alors vous savez comment "joker" beaucoup plus agréable sur tous vos fichiers.
PS
C'est juste une meilleure pratique. J'espère que cela pourra aider. La réponse a été empruntée ici: exécuter un cas de test spécifique dans Django lorsque votre application a un répertoire de tests
la source
J'ai deux fichiers. L'un est
tests.py
et l'autre esttest_api.py
. Je peux les exécuter individuellement comme ci-dessous.Reportez-vous à la réponse de @ osa concernant la convention de dénomination des fichiers.
la source