Ich bin sowohl für Python als auch für Django neu und lerne, indem ich eine Website für das Diätmanagement erstelle, aber ich bin völlig besiegt, weil meine Unit-Tests ausgeführt wurden. Alle Dokumente und Blogs, die ich gefunden habe, besagen, dass sich tests.py, solange es aus tests.py erkennbar ist, im selben Ordner befindet wie models.py und Ihre Testklasse-Unterklassen TestCase, automatisch abgerufen werden sollte. Dies funktioniert bei mir nicht, wenn ich es ausführe manage.py test <myapp>
, werden keine Tests gefunden.
Ich habe mit all meinen Tests in einem eigenen Paket begonnen, es aber auf alle Tests vereinfacht, die sich nur in meiner Datei tests.py befinden. Die aktuelle tests.py sieht aus wie:
import unittest
from pyDietTracker.models import Weight
from pyDietTracker.weight.DisplayDataAdapters import DisplayWeight
class TestDisplayWeight(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def testGetWeightInStone_KG_Correctly_Converted(self):
weight = Weight()
weight.weight = 99.8
testAdapter = DisplayWeight(weight)
self.assertEquals(testAdapter.GetWeightInStone(), '15 st 10 lb')
Ich habe es versucht, indem ich auch die Django TestCase-Klasse untergeordnet habe, aber das hat auch nicht funktioniert. Ich verwende Django 1.1.1, Python 2.6 und verwende Snow Leopard.
Ich bin mir sicher, dass mir etwas sehr Grundlegendes und Offensichtliches fehlt, aber ich kann einfach nicht herausfinden, was. Irgendwelche Ideen?
Bearbeiten: Nur ein kurzes Update nach einem Kommentar
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'pyDietTracker',
)
Um die Tests zum Laufen zu bringen, laufe ich manage.py test pyDietTracker
quelle
settings
siehst du aus? Befindet sich diese Anwendung in der Liste von INSTALLED_APPS?Antworten:
Ich hatte das gleiche Problem, aber mein Problem war anders.
Ich wurde
Ran 0 tests
als OP.Es stellt sich jedoch heraus, dass die Testmethoden in Ihrer Testklasse mit dem Schlüsselwort beginnen müssen, um
test
ausgeführt zu werden .Beispiel:
from django.test import TestCase class FooTest(TestCase): def setUp(self): pass def tearDown(self): pass def this_wont_run(self): print 'Fail' def test_this_will(self): print 'Win'
Auch die Dateien mit Ihren Tests müssen mit dem
test
Schlüsselwort beginnen .quelle
test*.py
So wählt Django die Testanzugdateien aus. Django DocWenn Sie ein
yourapp/tests
Paket / einen Stil für Unittests verwenden, stellen Sie sicher, dass dort ein enthalten ist__init__.py
(da dies ein Python-Modul ist!).quelle
my_apps/app_name/
", sollten Sie eine__init__.py
Datei in erstellenmy_apps/
.Ich kann Tests für bestimmte Apps ausführen, z
aber wenn ich renne
Es wurden 0 Tests gefunden
Finden Sie heraus, dass ich dies im selben Verzeichnis wie manage.py ausführen muss
Die Lösung wäre also, CD in das Projektverzeichnis zu schreiben und auszuführen
quelle
python project/manage.py test project/
In meinem Fall fehlte im App-Ordner selbst ein
__init__.py
. Dies führt zu dem Verhalten, mit dem der Test ausgeführt wird,python manage.py test project.app_name
jedoch nicht mitpython manage.py test
.project/ app_name/ __init__.py # this was missing
quelle
project/apps/core
, ohne__init__.py
inproject/apps
.tests
gepostet haben. Ich habe einen Unterordner erstellt, aber vergessen, einen__init__.py
unter dieser Richtung einzufügen . Das Hinzufügen hat es geschafft!__init__.py
zur App funktioniert. Anfangs habe ich nur__init__.py
den Testordner eingecheckt.Dies passiert auch, wenn Sie in Ihrer tests.py einen Syntaxfehler haben.
quelle
Hat es geschafft.
Es stellte sich heraus, dass ich es getan hatte,
django-admin.py startproject pyDietTracker
aber nichtpython manage.py startapp myApp
. Nachdem ich zurückgegangen war und dies getan hatte, funktionierte es wie dokumentiert. Anscheinend muss ich viel über das Lesen und den Unterschied zwischen einer Website und einer App in Django lernen.Vielen Dank für Ihre Hilfe S.Lott und Emil Stenström. Ich wünschte, ich könnte beide Ihre Antworten akzeptieren, weil beiden sehr geholfen wird.
Wichtigste Lektion Tests funktionieren nur auf App-Ebene, nicht auf Site-Ebene
quelle
In meinem Fall habe ich getippt
def
stattclass
. Anstattclass TestDisplayWeight(TestCase): # correct!
ich hatte
def TestDisplayWeight(TestCase): # wrong!
quelle
Dies kann auch passieren, wenn Sie ein
tests
Modul anstelle von a verwendentests.py
. In diesem Fall müssen Sie alle Testklassen in das__init__.py
Modul Ihres Tests importieren , zIn Ihrem müssen
__init__.py
Sie jetzt Folgendes importierensomemodule
:from .somemodule import *
quelle
Hier ist noch eine, die ich gerade hatte: Überprüfen Sie, ob Ihre Testdateien nicht ausführbar sind. Meine Virtualbox hat sie automatisch als ausführbare Datei gemountet, sodass die Testerkennung sie vollständig übersehen hat. Ich musste sie in die relevanten
__init__.py
Dateien einfügen, bevor mir jemand sagte, was das Problem war, aber jetzt sind sie entfernt und nicht ausführbar und alles funktioniert.quelle
Dies geschah, als ich eine test.py-Datei und ein test / -Unterverzeichnis im selben Django-App-Verzeichnis hatte. Ich denke, ich verwirre Python oder den Testläufer, ob ich nach einem Testmodul (in test.py) oder einem Testpaket (in test / subdir) suche.
quelle
In meinem Fall vermisse ich es, meinen Funktionsnamen mit test_ zu beginnen und wenn ich meinen Test mit:
Ergebnis war:
Creating test database for alias 'default'... System check identified no issues (0 silenced). ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK Destroying test database for alias 'default'...
es scheint, dass Django meine Tests nicht erkennen kann!
dann ändere ich die Datei myproject / myapp / test.py wie folgt :
from django.test import TestCase # Create your tests here. class apitest(TestCase): def test_email(self): pass def test_secend(self): pass
nach diesem Ergebnis ist:
Creating test database for alias 'default'... System check identified no issues (0 silenced). .. ---------------------------------------------------------------------- Ran 2 tests in 2.048s OK Destroying test database for alias 'default'...
quelle
Verwendung dieser Syntax
anstatt
./manage.py test
dieses Problem für mich zu lösen.quelle
Wenn Sie versuchen, einen Test in Ihrer Haupt-App wie my_app / my_app / auszuführen, stellen Sie sicher, dass Folgendes überprüft wurde:
settings.py
DATABASES['default']
Inneressettings.py
richtig eingestellt istmodels.py
(auch wenn Sie keine verwenden, muss mindestens eine leere vorhanden sein)quelle
Siehe https://docs.djangoproject.com/de/1.11/topics/testing/overview/
Der häufigste Grund dafür, dass Tests nicht ausgeführt werden, ist, dass Ihre Einstellungen nicht richtig sind und sich Ihr Modul nicht in INSTALLED_APPS befindet.
Wir verwenden
django.test.TestCase
anstelle vonunittest.TestCase
. Es hat dieClient
gebündelt.https://docs.djangoproject.com/de/1.11/topics/testing/tools/#django.test.TestCase
quelle
In derselben Datei hatte ich zwei Testklassen mit dem gleichen Namen , und dies verhinderte natürlich, dass alle Tests ausgeführt wurden.
quelle
Ich habe eine Methode erstellt, die
run
in meiner Testklasse aufgerufen wurde und sich als sehr schlechte Idee herausstellte. Python konnte sehen, dass ich Tests ausführen wollte, dies aber nicht konnte. Dieses Problem ist etwas anders, aber das Ergebnis ist das gleiche - es schien, als könnten die Tests nicht gefunden werden.Beachten Sie, dass die folgende Meldung angezeigt wurde:
You want to run the existing test: <unittest.runner.TextTestResult run=0 errors=0 failures=0>
quelle
Laufen Sie
--help
und suchen Sie nach ausführlichen. Kurbeln Sie es auf max.Ich lief
manage.py test --verbose
und fand diese Debug-Ausgabe ganz oben:>nosetests --with-spec --spec-color --verbose --verbosity=2
.Oh schau! Ich hatte installiert und vergessen
nosetests
. Und es heißt--verbosity=2
. Ich habe herausgefunden, dass 3 das Maximum ist und habe es mit 3 ausgeführt. Ich habe viele davon gefunden:nose.selector: INFO: /media/sf_C_DRIVE/Users/me/git/django/app/tests/test_processors.py is executable; skipped
Das gab mir den richtigen Hinweis. Es hat tatsächlich Probleme mit Dateien, bei denen das x-Bit gesetzt ist. Ich wurde jedoch von der Strecke geworfen, da einige der Tests ausgeführt wurden - obwohl ausdrücklich angegeben wurde, dass sie übersprungen werden würden. Das Ändern von Bits ist nicht möglich, da ich die Tests in einer VM ausführe und meine Windows NTFS-Festplatte freigebe. Also das Hinzufügen
--exe
behoben.quelle
Hatte das gleiche Problem und es lag daran, dass mein Dateiname ein
-
Zeichen im Namen hatte. Mein Dateiname warroute-tests.py
und wurde geändert inroute_tests.py
quelle
Wenn dieser Fehler nach dem Upgrade auf Django 3 auftritt, kann dies daran liegen, dass der
-k
Parameter seine Bedeutung geändert hat von:zu
-k TEST_NAME_PATTERNS Only run test methods and classes that match the pattern or substring. Can be used multiple times. Same as unittest -k option.
So ersetzen Sie einfach
-k
mit ,--keepdb
um es wieder zu arbeiten.quelle
Die Django-Engine durchsucht Dateien und Ordner mit dem
test_
Präfix (innerhalb einestests
Ordners). In meinem Fall war es eine einfache Lösung.Stellen Sie also sicher, dass der Name der Datei / des Ordners damit beginnt.
quelle