Das Verhalten hat sich in Django 1.6 geändert, sodass kein Paket mehr erstellt werden muss. Benennen Sie einfach Ihre Dateien test*.py
.
Aus der Django 1.7-Dokumentation
Wenn Sie Ihre Tests ausführen, besteht das Standardverhalten des Testdienstprogramms darin, alle Testfälle (dh Unterklassen von unittest.TestCase) in einer Datei zu finden, deren Name mit test beginnt. Erstellen Sie automatisch eine Testsuite aus diesen Testfällen. und führen Sie diese Suite aus.
Aus der Django 1.6-Dokumentation ,
Die Testerkennung basiert auf der integrierten Testerkennung des unittest-Moduls. Standardmäßig werden Tests in jeder Datei mit dem Namen "test * .py" im aktuellen Arbeitsverzeichnis erkannt.
Vorheriges Verhalten aus der Django 1.5-Dokumentation :
Wenn Sie Ihre Tests ausführen, besteht das Standardverhalten des Testdienstprogramms darin, alle Testfälle (dh Unterklassen von unittest.TestCase) in models.py und tests.py zu finden und automatisch eine Testsuite aus diesen Testfällen zu erstellen. und führen Sie diese Suite aus.
Es gibt eine zweite Möglichkeit, die Testsuite für ein Modul zu definieren: Wenn Sie eine Funktion namens suite () in models.py oder tests.py definieren, verwendet der Django-Testläufer diese Funktion, um die Testsuite für dieses Modul zu erstellen. Dies folgt der vorgeschlagenen Organisation für Unit-Tests. Weitere Informationen zum Erstellen einer komplexen Testsuite finden Sie in der Python-Dokumentation.
test*.py
Dateien in einem Ordner ablegen, der aufgerufen wirdtests
, um den Ordner sauber zu halten. Dies ist möglich, aber Sie müssen es ausführen./manage.py test app.tests
und alle relativen Importe müssen eine Ebenefrom .models
höher werden ( werdenfrom ..models
).Beachten Sie, dass dieser Ansatz ab Django 1.6 nicht mehr gültig ist (siehe diesen Beitrag) .
Sie können
tests
Ordner mit___init___.py
innen erstellen (so dass es ein Paket wird). Anschließend fügen Sie dort Ihre Split-Test-PY-Dateien hinzu und importieren alle in___init___.py
.Dh: Ersetzen Sie die
test.py
Datei durch ein Modul, das wie die Datei aussieht und funktioniert:Erstellen Sie ein
tests
Verzeichnis unter der betreffenden AppImportieren Sie die Submodule in
app\tests\__init__.py
:Jetzt können Sie ./manage.py so verwenden, als wären sie alle in einer einzigen Datei:
quelle
python manage.py test myapp
dann funktioniert diese Antwort tatsächlich einwandfrei . (habe es gerade versucht)Die Antwort von Tomasz ist richtig. Es kann jedoch mühsam werden, sicherzustellen, dass die Importe
__init__.py
Ihrer Dateistruktur entsprechen.Um alle Tests im Ordner automatisch zu erkennen , können Sie Folgendes hinzufügen
__init__.py
:Auf diese Weise können Sie
./manage.py test appname
bestimmte Tests ausführen, jedoch nicht ausführen . Dazu können Sie diesen Code verwenden (auch in__init__.py
):Jetzt können Sie alle Ihre Tests über
manage.py test app
oder bestimmte Tests über ausführenmanage.py test app.TestApples
quelle
__init__.py
sys.modules[packagename]
. Eine schnelle Problemumgehung ist fürdel
alle Probleme, die nach den oben genannten Problemen auftreten. (Oder Sie könnten Ihre Ordner umbenennen;))python manage.py test appName
) das zweite Codebit einen Fehler auslöst, der besagt, dass__path__
nicht verfügbar war. Ich habe es vermieden, indem ich das zweite Snippet in einenif '__path__' in locals():
Scheck eingewickelt habe, was den Trick getan hat. Danke für die Antwort!Machen Sie einfach Ihre Verzeichnisstruktur wie folgt:
Und
python manage.py test myapp
wird wie erwartet funktionieren.quelle
http://docs.python.org/library/unittest.html#organizing-tests befasst sich mit der Aufteilung der Dateien in Module, und der Abschnitt direkt darüber enthält ein Beispiel.
quelle
In init muss nichts codiert werden. Erstellen Sie einfach ein Unterverzeichnis in Ihrer App. Die einzige Voraussetzung ist , es nicht Tests zu nennen. * Zum Beispiel
quelle
Mit Django 2.2 könnte eine einfache und ziemlich gute Lösung darin bestehen, einen
test
Ordner in einer App zu erstellen , und Sie können Ihre zugehörigentest_...py
Dateien ablegen, indem Sie sie einfach__init__.py
demtest
Ordner hinzufügen .quelle
Wenn Sie ein komplizierteres Setup haben oder keine
from ... import *
Anweisungen vom Typ -type verwenden möchten , können Sie eine Funktion definieren, diesuite
in Ihrer Datei tests.py (oder tests / __ init__.py) aufgerufen wird und eine Instanz von zurückgibtunittest.TestSuite
.quelle
Ich denke, es führt
./manage.py test
einfach alle Testtricks aus (in django> = 1.7).Wenn Ihre Organisation Tests geht es um die Gruppierung und Rosinen herauszupicken und Sie sind Fan von
nose
Verwendung django Nase :Wenn Sie Nase kennen, dann wissen Sie, wie man über alle Ihre Dateien viel besser "Wildcard" macht.
PS
Es ist nur eine bessere Praxis. Hoffentlich hilft das. Die Antwort wurde von hier ausgeliehen: Ausführen eines bestimmten Testfalls in Django, wenn Ihre App über ein Testverzeichnis verfügt
quelle
Ich habe zwei Dateien. Einer ist
tests.py
und ein anderer isttest_api.py
. Ich kann diese einzeln wie unten ausführen.Lesen Sie die Antwort von @ osa zur Dateinamenskonvention.
quelle