2010-07-01 10 views
10

Nie jestem pewien, jak uruchomić moduł obsługi noska __main__ do pracy. Mam to na końcu mojego modułu testowego:Czy istnieje sposób, aby moduł nosowy Pythona działał tak samo w __main__ i w linii poleceń?

if __name__ == "__main__": 
    import nose 
    nose.main() 

co daje mi:

---------------------------------------------------------------------- 
Ran 0 tests in 0.002s 

OK 

ale biegnę to samo za pomocą wiersza poleceń, stwierdzi, testy i je wykonuje:

MacBook-Pro:Storage_t meloam$nosetests FileManager_t.py 
............E.. 
====================================================================== 
ERROR: testStageOutMgrWrapperRealCopy (WMCore_t.Storage_t.FileManager_t.TestFileManager) 
---------------------------------------------------------------------- 

SNIP

---------------------------------------------------------------------- 
Ran 15 tests in 0.082s 

FAILED (errors=1) 

Grałem z przekazywaniem różnych argumentów do nose.main(), ale nie mogę znaleźć niczego, co działa. Czy brakuje mi czegoś naprawdę oczywistego?

Dzięki

Odpowiedz

9

Dla dobra potomności, jest to, co mam użyć:

if __name__ == '__main__': 
    import nose 
    nose.run(argv=[__file__, '--with-doctest', '-vv']) 

--with-doctests będzie również wykonywać swoje doctests w tym samym pliku.

+0

dziwne, że nie można po prostu uruchomić to z Aquamacs. Aquamacs nie ustawia zmiennej __file__ dla pliku tymczasowego, w którym zapisuje bufor. –

+0

Nadanie nosowi nazwy pliku jest inteligentne. Otrzymywałem dziwne błędy, tak jak próbowałem zinterpretować funkcję, która była w nazwie modułu. –

+0

To wydaje się funkcjonalnie równoważne 'nose.runmodule (argv = ['nose', '--with-doctest', '-vv'])' – MarkHu

0

Trzeba użyć nose.core.TestProgram bezpośrednio przekazując mu fałszywe argumenty wiersza poleceń. Że nie jestem pewien, choć jeśli będzie znaleźć testy z tego samego modułu, jak używasz

7
if __name__ == '__main__': 
    import nose 
    nose.run(defaultTest=__name__) 
1

zalecam sprawdzanie 2 rzeczy:

upewnić się, że źródło PLIKI postępować zgodnie z odpowiednią konwencją nazewnictwa : (szczegółowy w tym answer).

Ja, na przykład, musiałem dołączyć "_Test" do wszystkich moich plików źródłowych. Następnie, wszystko czego potrzebujesz to ten argument (zakładając, że głównym jest u podstaw testów):

nose.main(defaultTest="") 

Próbowałem z:

nose.run(defaultTest=__name__) 

jak poprzedni odpowiedź sugeruje, ale z jakiegoś powodu to nie działa dla mnie. Musiałem zrobić OBU rzeczy, żeby to działało!

Mam nadzieję, że to pomaga.

EDIT: Nawiasem mówiąc, dzwoniąc z

nose.run() 

lub

nose.main() 

wykonane bez zauważalnej różnicy albo.