2010-01-10 14 views
42

Jestem nowy zarówno w Pythonie, jak iw Django i uczę się, tworząc witrynę do zarządzania dietą, ale zostałem kompletnie pokonany, wykonując testy jednostkowe. Wszystkie znalezione dokumenty i blogi mówią, że dopóki jest to możliwe do wykrycia z wersji tests.py, tests.py znajduje się w tym samym folderze co model .py i podklasy klasy testowej TestCase, wszystkie powinny zostać pobrane automatycznie. To nie działa dla mnie, gdy uruchamiam manage.py test <myapp>, nie znajduje żadnych testów.Tester Django nie znajduje testów

Zacząłem od wszystkich testów w ich własnej paczce, ale uprościłem to do wszystkich testów znajdujących się w pliku tests.py. Obecny tests.py wygląda następująco:

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') 

Próbowałem go przez instacji klasy Django TestCase jak dobrze, ale to nie działało. Używam Django 1.1.1, Python 2.6 i używam Snow Leopard.

Jestem pewien, że brakuje mi czegoś bardzo prostego i oczywistego, ale nie mogę pojąć, co. Jakieś pomysły?

Edycja: Tylko szybka zmiana po komentarzu

INSTALLED_APPS = (
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.admin', 
'pyDietTracker', 
) 

Aby uzyskać testy uruchomić Używam manage.py test pyDietTracker

+0

Jakie polecenie uruchamiasz, aby je wykonać? Jak wyglądają twoje ustawienia?Czy ta aplikacja znajduje się na liście INSTALLED_APPS? –

+0

Mam zaktualizowane pytanie z moją INSTALLED_APPS, czy jest inna część ustawień, która jest istotna? Dzięki –

+0

Jakie wiadomości otrzymujesz? –

Odpowiedz

10

Pracował go.

Okazuje się, że zrobiłem django-admin.py startproject pyDietTracker, ale nie python manage.py startapp myApp. Po powrocie i wykonaniu tego, działało jak udokumentowane. Wygląda na to, że muszę się wiele nauczyć o czytaniu io różnicy między witryną a aplikacją w Django.

Dziękuję za pomoc S.Lott i Emil Stenström. Chciałabym móc zaakceptować obie twoje odpowiedzi, ponieważ obie są bardzo pomocne.

najważniejsza lekcja Próby pracy nie tylko na poziomie aplikacji poziomie witryny

101

miałem ten sam problem, ale mój problem był inny.

Otrzymałem Ran 0 tests, jako OP.

Ale okazuje się, że metody testowe w klasie testowej muszą zaczynać się słowem kluczowym test, aby uruchomić.

Przykład:

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' 

Także plikami z testów muszą zacząć test hasła.

+7

Doskonała odpowiedź i bardzo łatwy nadzór, jeśli nie jesteś " zwracając uwagę. Dzięki! – nicorellius

+8

jeśli nadal nie działa, sprawdź, czy nazwa pliku pasuje do tego wzorca: 'test * .py' W ten sposób django wybiera pliki testowe. [django doc] (https://docs.djangoproject.com/en/1.7/topics/testing/overview/#running-tests) – linqu

+2

Dość irytujące! –

3

Miałem to miejsce, gdy miałem plik test.py i podkatalog test/w tym samym katalogu aplikacji Django. Chyba mylę pytona lub biegacza testowego, czy szukam modułu testowego (w test.py) lub pakietu testowego (w teście/subdir).

1

Jeśli próbujesz uruchomić test w głównej aplikacji, takich jak my_app/my_app/upewnij się, że masz następujące sprawdzone:

  1. Nazwa aplikacji jest wymieniony w INSTALLED_APPS wewnątrz settings.py
  2. Upewnij Twój DATABASES['default'] wewnątrz settings.py jest ustawiony prawidłowo
  3. App ma models.py (nawet jeśli nie korzystasz z jednego, przynajmniej jedna pusta jest wymagane, aby być tam)
+2

Jeśli używasz folderu "test", pamiętaj, aby umieścić tam plik "_ _init_ _.py". – xbello

7

Zdarza się to również w przypadku błędu składni w pliku tests.py.

28

Jeśli używasz pakietu/stylu yourapp/tests do tworzenia zmian, upewnij się, że jest tam __init__.py (ponieważ to właśnie sprawia, że ​​jest to moduł Pythona!).

3

Oto kolejny, który właśnie miałem: Sprawdź, czy twoje pliki testowe nie są wykonywalne. Moja wirtualna skrzynka automatycznie instalowała je jako pliki wykonywalne, więc test odkrył, że całkowicie je pomijałem. Musiałem dodać je do odpowiednich plików __init__.py, zanim ktoś powiedział mi, czym jest problem, ale teraz są one usuwane, a nie wykonalne i wszystko _just_works.

7

Rozwiązanie było głupie w moim przypadku, wpisałem def zamiast class.

5

Mogę uruchomić test dla konkretnych aplikacji, np.

python project/manage.py test app_name 

ale po uruchomieniu

python project/manage.py test 

0 testów stwierdzono

dowiedzieć się, że jest potrzebne do uruchomienia w tym samym katalogu manage.py

więc rozwiązanie byłoby , przejdź do katalogu projektu i uruchom

python manage.py test 
+0

To samo stało się ze mną (https://github.com/agconti/cookiecutter-django-rest/blob/master/%7B%7Bcookiecutter.github_repository_name%7D%7D/fabfile.py) –

1

Może się to również zdarzyć, gdy używasz modułu tests zamiast tests.py. W takim przypadku musisz zaimportować wszystkie klasy testowe do __init__.py swojego modułu testowego, np.

tests/ 
    __init__.py 
    somemodule.py 

w twojej __init__.py teraz trzeba importować somemodule takiego:

from .somemodule import * 
0

Używając tej składni

python manage.py test 

zamiast ./manage.py test rozwiązał ten problem dla mnie.

Powiązane problemy