Odpowiedzi:
Poszczególne metody lub klasy testowe można wyłączyć za pomocą unittest.skip
dekoratora.
@unittest.skip("reason for skipping")
def test_foo():
print('This is foo test case.')
@unittest.skip # no reason needed
def test_bar():
print('This is bar test case.')
Aby zapoznać się z innymi opcjami, zapoznaj się z dokumentacją Pomijanie testów i oczekiwane awarie .
@unittest.skip
działa również dobrze.
@unittest.skip
nie działa.
Możesz użyć dekoratorów, aby wyłączyć test, który może opakować funkcję i uniemożliwić testowi jednostkowemu googletest lub python uruchomienie przypadku testowego.
def disabled(f):
def _decorator():
print f.__name__ + ' has been disabled'
return _decorator
@disabled
def testFoo():
'''Foo test case'''
print 'this is foo test case'
testFoo()
Wynik:
testFoo has been disabled
Najnowsza wersja (2.7 - niewydana) obsługuje pomijanie / wyłączanie testów w ten sposób . Możesz po prostu pobrać ten moduł i użyć go w istniejącej instalacji Pythona. To prawdopodobnie zadziała.
Przed tym, użyłem do zmiany nazwy testów chciałem pominięte do xtest_testname
od test_testname
.
Oto krótki skrypt elisp, który to zrobi. Mój elisp jest trochę zardzewiały, więc z góry przepraszam za wszelkie problemy. Niesprawdzone.
(defun disable_enable_test ()
(interactive "")
(save-excursion
(beginning-of-line)
(search-forward "def")
(forward-char)
(if (looking-at "disable_")
(zap-to-char 1 ?_)
(insert "disable_"))))
Wystarczy umieścić @unittest.SkipTest
dekorator nad testem.
unittest.skip
(bez powodu) daje mi błąd w Pythonie 2, ale nie w Pythonie 3.
Koncentrując się na „tymczasowo wyłączonej” części pytania, najlepsza odpowiedź w pewnym stopniu zależy od przypadku użycia. Przypadek użycia, który mnie tu sprowadził, jest taki, że wykonuję programowanie sterowane testami na funkcji. W tym procesie sukcesywnie piszę testy i często używam punktów przerwania w funkcji do debugowania. Jeśli po prostu uruchamiam wszystkie testy za każdym razem, gdy uruchamiam test runner, w końcu zatrzymuję się w punktach przerwania testów, które już działają. Dodanie „pomiń” lub zmiana nazwy testu lub czegoś podobnego nie jest tym, czego chcę, ponieważ po zakończeniu pisania funkcji chcę, aby wszystkie testy zostały uruchomione. Gdybym użył „pomiń”, musiałbym cofnąć się i „cofnąć pomijanie”.
W moim przypadku rozwiązanie leży w module uruchamiającym testy, a nie w kodzie testowym. Używam pytest . Dzięki pytest łatwo jest określić pojedynczy test z wiersza poleceń:
pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME
(zamień czapki na swoje wartości).
Rozumiem, że to pytanie dotyczyło python-unitest. Nie używałem tego od dłuższego czasu. Nie zdziwiłbym się gdyby miał coś podobnego do pytest. Jeśli nie, możesz łatwo przejść do pytest. Nie musisz modyfikować swojego kodu. Po prostu zainstaluj go i zmień polecenie test runner.
Używam również PyCharm Pro. Na stronie, na której jest wyświetlany mój kod testu, obok definicji każdego testu znajduje się mała ikona. Mogę kliknąć tę ikonę i indywidualnie uruchomić ten test.
@unittest.SkipTest
działa, a nie@unittest.skip