2010-07-21 14 views
31

Mam katalogów, które zawierają pliki o nazwie jak: test_foo.pyPython unittest i odkrycie

Każdy plik ma precedensowe.

Chciałbym

1) Uruchom wszystkie testy w katalogu z wiersza poleceń. Używam unittest2, ponieważ używamy Pythona 2.5.1. Z jednego z tych katalogów próbowałem wpisać to w linii poleceń:

python -m unittest2 discover -p 'test_*.py' 

i kilka różnych wariantów. Nie otrzymuję błędu, ale nic się nie dzieje. Spodziewałem się, że wszystkie testy we wszystkich przypadkach testowych w tym katalogu będą działać i uzyskać wyniki.

2) Próbowałem też o skrypt w katalogu, w którym zrobiłem to:

loader = unittest2.TestLoader() 
t = loader.discover('.') 

Gdybym drukować zmienną t, widzę moich testów, ale z docs nie mogę zrozumieć co zrobić z obiektem modułu ładującego, gdy go już mam.

Odpowiedz

23

Daj jak starasz się używać unittest2 z linii poleceń na Pythonie < 2.7, myślę, że może pominięcia the note on the unittest2 PyPI page:

Uwaga

wykorzystanie linii poleceń

W Pythonie 2.7 wywołuje się niepotwierdzone funkcje wiersza poleceń (w tym test discover) za pomocą python -m unittest <args>. Ponieważ unittest to pakiet, a możliwość wywoływania paczek z python -m ... jest nowa w Pythonie 2.7, my nie możemy tego zrobić dla unittest2.

Zamiast tego unittest2 zawiera skrypt unit2. Wykorzystanie polecenia linia:

unit2 discover unit2 -v test_module 

Istnieje również kopię tego skryptu zwanego unit2.py, użytecznego dla Windows który używa plików Extensions zamiast linie shebang ustalać co Program do wykonywania plików. Oba te skrypty są instalowane przez distutils .

Czy próbowałeś skryptu unit2 których ta uwaga zaleca jako alternatywę dla starszych pyton do „pakietu Uruchom jako główny skryptu” cechą Pythonie 2.7? Być może jego źródła mogą być przydatne, aby dowiedzieć się, jak odkrywać i uruchamiać testy z własnego kodu, jeśli wolisz to robić.

+0

Dzięki Alex! Tęskniłem za tą notatką. A teraz działa. Czy nosiłeś nos? Polecasz to? Wspaniałe książki, dzięki za ich napisanie. – Aaron

+0

@Aaron, nie ma za co! Tak, z powodzeniem używałem nosa w przeszłości (jeszcze nie wiem, czy będę je uzupełniał, czy też uzupełniam o nową funkcję unittest - nie jestem jeszcze zaznajomiony z tym ostatnim!). –

42

Wpadłem na ten sam problem podczas uruchamiania python -m unittest discover. Oto dobra lista kontrolna do weryfikacji konfiguracji. Nose jest bardziej elastyczny z dozwolonymi konfiguracjami, ale niekoniecznie lepszy.

  1. Upewnij się, że wszystkie pliki/katalogi zaczynają się od test.Czy nie użyć test-something.py, ponieważ nie jest to poprawna nazwa modułu python. Użyj test_something.py.

  2. Jeśli oddanie testy w podkatalogu (np test/), upewnij się utworzyć plik test/__init__.py tak pyton potraktuje katalogu jako pakiet.

  3. Wszystkie definicje przypadków klas testowych należy rozszerzyć o unittest.TestCase. Na przykład

    class DataFormatTests(unittest.TestCase) 
    
+0

Czy istnieje sposób na dodanie skryptu ładowania początkowego przy użyciu funkcji unittest discover? – 010110110101

+0

Również nazwy metod, tj. 'Test_does_something (self):' –

+1

Dla mnie tworzenie 'testów/__ init __. Py' rozwiązuje problem. – gzc

47

Kiedy odkryli, testy, można uruchomić je z biegacza testowym.

import unittest2 
loader = unittest2.TestLoader() 
tests = loader.discover('.') 
testRunner = unittest2.runner.TextTestRunner() 
testRunner.run(tests) 

Uruchomienie powyższego kodu spowoduje wydrukowanie wyników testu na standardowe wyjście.

+10

To jest ten, którego szukałem i najbardziej bezpośrednia odpowiedź na oryginalne pytanie. Wygląda nieco inaczej w 2.7; 'test_loader = unittest.defaultTestLoader.discover ('.')'; następnie 'test_runner = unittest.TextTestRunner()'; następnie 'test_runner.run (test_loader)' i jesteś dobry. – Paul

+3

Jest to zalecana metoda, jeśli chcesz programowo wywołać testera, np. Z niestandardowego skryptu lub instancji "Command". –

Powiązane problemy