W naszym zespole definiujemy większość takich przypadków testowych:
Jedna klasa „framework” ourtcfw.py
:
import unittest
class OurTcFw(unittest.TestCase):
def setUp:
# something
# other stuff that we want to use everywhere
i wiele przypadków testowych, takich jak testMyCase.py:
import localweather
class MyCase(OurTcFw):
def testItIsSunny(self):
self.assertTrue(localweather.sunny)
def testItIsHot(self):
self.assertTrue(localweather.temperature > 20)
if __name__ == "__main__":
unittest.main()
Kiedy piszę nowy kod testowy i chcę go często uruchamiać oraz oszczędzać czas, robię to, że przed wszystkimi innymi testami umieszczam „__”. Ale jest to uciążliwe, odciąga mnie od kodu, który piszę, a generowany przez niego szum zatwierdzania jest po prostu denerwujący.
Tak więc np. Kiedy wprowadzam zmiany testItIsHot()
, chcę móc to zrobić:
$ python testMyCase.py testItIsHot
i unittest
uciekłem tylko testItIsHot()
Jak mogę to osiągnąć?
Próbowałem przepisać tę if __name__ == "__main__":
część, ale ponieważ jestem nowy w Pythonie, czuję się zagubiony i wciąż wdaję się we wszystko inne niż metody.
źródło
__init__.py
wewnątrz tego katalogu (i podkatalogów, jeśli istnieją) i wywołując np.python test/testMyCase.py test.MyCase.testItIsHot
.Jeśli organizujesz przypadki testowe, to znaczy postępuj zgodnie z tą samą organizacją, co rzeczywisty kod, a także korzystaj z importu względnego dla modułów w tym samym pakiecie
Możesz także użyć następującego formatu poleceń:
Dokumentacja Python3 dotycząca tego: https://docs.python.org/3/library/unittest.html#command-line-interface
źródło
Może działać dobrze, jak się domyślacie
Jest też inny sposób na przetestowanie
testItIsHot
:źródło
Jeśli sprawdzisz pomoc najczystszego modułu, dowiesz się o kilku kombinacjach, które pozwalają na uruchamianie klas przypadków testowych z modułu i metod testowych z klasy przypadków testowych.
Nie wymaga definiowania
unittest.main()
domyślnego zachowania modułu.źródło
usage
jest nawet dziwnie niespójna): uruchamianiepython -m unittest module_test.TestClass.test_method
zakłada plikmodule_test.py
(uruchamiany z bieżącego katalogu; i nie__init.py__
jest wymagany); i zawiera, który zawiera (działa to również dla mnie w Pythonie 2.7.13)module_test.py
class TestClass(unittest.TestCase)...
def test_method(self,...)
Może komuś się przyda. Jeśli chcesz uruchamiać tylko testy z określonej klasy:
Działa dla mnie w Pythonie 3.6
źródło
Zainspirowany przez @yarkee połączyłem go z częścią kodu, który już dostałem. Możesz także wywołać to z innego skryptu, po prostu wywołując funkcję
run_unit_tests()
bez konieczności używania wiersza poleceń lub po prostu wywołując go z wiersza poleceń za pomocąpython3 my_test_file.py
.Niestety działa to tylko dla
Python 3.3
lub przełożonego:Kod biegacza:
Trochę edytując kod, możesz przekazać tablicę ze wszystkimi testami jednostkowymi, które chcesz wywołać:
I inny plik:
Alternatywnie możesz użyć https://docs.python.org/3/library/unittest.html#load-tests-protocol i zdefiniować następującą metodę w module / pliku testowym:
Jeśli chcesz ograniczyć wykonanie do jednego pliku testowego, wystarczy ustawić wzorzec wykrywania testu na jedyny plik, w którym zdefiniowano
load_tests()
funkcję.Bibliografia:
Alternatywnie do ostatniego przykładu programu głównego po przeczytaniu
unittest.main()
implementacji metody wpadłem na następującą odmianę :źródło
TL; DR : To prawdopodobnie działałoby:
Wyjaśnienie :
Wygodny sposób
działałoby ALE jego niewypowiedzianym założeniem jest to, że masz już ten konwencjonalny fragment kodu w (zwykle na końcu) pliku testowym.
Niewygodny sposób
zawsze będzie działać, bez konieczności posiadania tego
if __name__ == "__main__": unittest.main()
fragmentu kodu w testowym pliku źródłowym.Dlaczego więc druga metoda jest uważana za niewygodną? Ponieważ trudno byłoby ( ręcznie wstawić tutaj jedną z części ciała _) wpisać tę długą ścieżkę oddzieloną kropkami. Podczas gdy w 1. metodzie,
mypkg/tests/test_module.py
część może być automatycznie uzupełniana, albo przez nowoczesną powłokę, albo przez edytora.PS: Jeśli uważasz, że ta część ciała znajduje się gdzieś poniżej talii, jesteś autentyczną osobą. :-) Mam na myśli „staw palcowy”. Zbyt dużo pisania byłoby niekorzystne dla twoich stawów. ;-)
źródło