Czy jest jakaś funkcja uruchamiana na początku / końcu scenariusza testów? Funkcje setUp i tearDown są uruchamiane przed / po każdym teście.
Zazwyczaj chciałbym mieć to:
class TestSequenceFunctions(unittest.TestCase):
def setUpScenario(self):
start() #launched at the beginning, once
def test_choice(self):
element = random.choice(self.seq)
self.assertTrue(element in self.seq)
def test_sample(self):
with self.assertRaises(ValueError):
random.sample(self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
def tearDownScenario(self):
end() #launched at the end, once
Na razie te setUp i tearDown są testami jednostkowymi i rozprzestrzeniają się we wszystkich moich scenariuszach (zawierających wiele testów), jeden jest pierwszym testem, drugi jest ostatnim testem.
python
unit-testing
łabędź
źródło
źródło
Odpowiedzi:
Od 2.7 (zgodnie z dokumentacją ) otrzymujesz
setUpClass
itearDownClass
które są wykonywane odpowiednio przed i po uruchomieniu testów w danej klasie. Alternatywnie, jeśli masz ich grupę w jednym pliku, możesz użyćsetUpModule
itearDownModule
( dokumentacja ).W przeciwnym razie najprawdopodobniej najlepszym rozwiązaniem będzie utworzenie własnego, pochodnego pakietu TestSuite i zastąpienie go
run()
. Wszystkie inne wywołania byłyby obsługiwane przez rodzica, a uruchomienie wywoływałoby kod konfiguracji i dezaktywacji wokół wywołaniarun
metody rodzica .źródło
Mam ten sam scenariusz, u mnie metody setUpClass i tearDownClass działają idealnie
źródło
W przypadku Pythona 2.5 i podczas pracy z pydevem jest to trochę trudne. Wygląda na to, że pydev nie używa zestawu testów, ale znajduje wszystkie indywidualne przypadki testowe i uruchamia je oddzielnie.
Moim rozwiązaniem było użycie takiej zmiennej klasy:
W przypadku tej sztuczki, gdy dziedziczysz z this
TestCase
(zamiast z oryginałuunittest.TestCase
), odziedziczysz równieżrunCount
wartość 0. Następnie w metodzie runrunCount
element potomnego przypadku testowego jest sprawdzany i zwiększany. To pozostawiarunCount
zmienną dla tej klasy na 0.Oznacza to, że
setUpClass
test zostanie uruchomiony tylko raz na klasę, a nie raz na instancję.Nie mam
tearDownClass
jeszcze metody, ale myślę, że można by coś zrobić używając tego licznika.źródło
Oto przykład: 3 metody testowe mają dostęp do udostępnionego zasobu, który jest tworzony raz, a nie na test.
źródło