Zachowanie zmieniło się w Django 1.6, więc nie ma już potrzeby tworzenia pakietu. Po prostu nazwij swoje pliki test*.py
.
Z dokumentacji Django 1.7
Podczas uruchamiania testów domyślnym zachowaniem narzędzia testowego jest znalezienie wszystkich przypadków testowych (czyli podklas unittest.TestCase) w dowolnym pliku, którego nazwa zaczyna się od test, automatycznie tworzy zestaw testów z tych przypadków testowych, i uruchom ten pakiet.
Z dokumentacji Django 1.6 ,
Wykrywanie testów jest oparte na wykrywaniu testów wbudowanym w moduł Unittest. Domyślnie spowoduje to wykrycie testów w dowolnym pliku o nazwie „test * .py” w bieżącym katalogu roboczym.
Poprzednie zachowanie, z dokumentacji Django 1.5 :
Podczas uruchamiania testów domyślnym zachowaniem narzędzia testowego jest znalezienie wszystkich przypadków testowych (czyli podklas unittest.TestCase) w models.py i tests.py, automatyczne utworzenie zestawu testów z tych przypadków testowych, i uruchom ten pakiet.
Istnieje drugi sposób zdefiniowania zestawu testów dla modułu: jeśli zdefiniujesz funkcję o nazwie suite () w models.py lub tests.py, moduł uruchamiający testy Django użyje tej funkcji do skonstruowania zestawu testów dla tego modułu. Jest to zgodne z sugerowaną organizacją testów jednostkowych. Zobacz dokumentację języka Python, aby uzyskać więcej informacji na temat tworzenia złożonego zestawu testów.
test*.py
pliki w folderze o nazwie,tests
aby utrzymać folder w czystości - jest to możliwe, ale musisz uruchomić./manage.py test app.tests
i wszystkie względne importy muszą wzrosnąć o jeden poziom (from .models
staje sięfrom ..models
).Zauważ, że to podejście nie jest już poprawne od Django 1.6, zobacz ten post .
Możesz stworzyć
tests
folder z___init___.py
wnętrzem (aby stał się pakietem). Następnie dodajesz tam pliki .py testu podziału i importujesz je wszystkie w formacie___init___.py
.To znaczy: Zastąp
test.py
plik modułem, który wygląda i działa jak plik:Utwórz
tests
katalog w danej aplikacjiZaimportuj podmoduły do
app\tests\__init__.py
:Teraz możesz używać ./manage.py tak, jakby wszystkie znajdowały się w jednym pliku:
źródło
python manage.py test myapp
to w rzeczywistości ta odpowiedź działa dobrze. (właśnie spróbowałem)Odpowiedź podana przez Tomasza jest prawidłowa. Jednak upewnienie się, że importowane
__init__.py
pliki są zgodne ze strukturą plików , może być uciążliwe .Aby automatycznie wykryć wszystkie testy w folderze , możesz dodać to w
__init__.py
:Umożliwi to uruchomienie,
./manage.py test appname
ale nie będzie obsługiwać wykonywania określonych testów. Aby to zrobić, możesz użyć tego kodu (również w__init__.py
):Teraz możesz uruchomić wszystkie swoje testy za pośrednictwem
manage.py test app
lub konkretne testy za pośrednictwemmanage.py test app.TestApples
źródło
__init__.py
sys.modules[packagename]
. Szybkim obejściem jest to,del
które powoduje problemy po powyższym. (Lub możesz zmienić nazwy swoich folderów;))python manage.py test appName
) drugi bit kodu zgłosiłby błąd stwierdzający, że__path__
nie jest dostępny. Uniknąłem tego, zawijając drugi fragment wif '__path__' in locals():
czek, co załatwiło sprawę . Dziękuję za odpowiedź!Po prostu utwórz strukturę katalogów w następujący sposób:
I
python manage.py test myapp
będzie działać zgodnie z oczekiwaniami.źródło
http://docs.python.org/library/unittest.html#organizing-tests mówi o dzieleniu plików na moduły, a sekcja tuż nad nią zawiera przykład.
źródło
Nie ma potrzeby kodowania niczego w init. Po prostu utwórz podkatalog w swojej aplikacji. Jedynym wymogiem jest to, aby nie nazywać tego testami * Na przykład
źródło
Django 2.2 to prosta i dość dobrym rozwiązaniem mogłoby być stworzenie
test
folderu wewnątrz aplikacji, można umieścić powiązanetest_...py
pliki do, wystarczy dodać__init__.py
dotest
folderu.źródło
Jeśli masz bardziej skomplikowaną konfigurację lub nie chcesz używać
from ... import *
instrukcji -type, możesz zdefiniować funkcję wywoływanąsuite
w swoim tests.py (lub testy / __ init__.py), która zwraca instancjęunittest.TestSuite
.źródło
Myślę, że
./manage.py test
po prostu uruchamia wszystkie sztuczki testowe (w django> = 1.7).Jeśli w organizowaniu testów chodzi o grupowanie i szyfrowanie i jesteś fanem
nose
używania django nose :Jeśli znasz nos, wiesz, jak używać symboli wieloznacznych we wszystkich swoich plikach.
PS
To po prostu lepsza praktyka. Mam nadzieję, że to pomoże. Odpowiedź została zapożyczona stąd: Uruchamianie konkretnego przypadku testowego w Django, gdy Twoja aplikacja ma katalog testing
źródło
Mam dwa pliki. Jeden jest,
tests.py
a drugi jesttest_api.py
. Mogę je uruchomić indywidualnie, jak poniżej.Zobacz odpowiedź @ osa na temat konwencji nazewnictwa plików.
źródło