Czy ktoś może wyjaśnić użycie Pythona setUp
i tearDown
metod podczas pisania przypadków testowych, poza tym, że setUp
jest on wywoływany bezpośrednio przed wywołaniem metody testowej i tearDown
jest wywoływany natychmiast po wywołaniu?
Odpowiedzi:
Ogólnie rzecz biorąc, dodajesz wszystkie wymagane kroki do setUp i wszystkie kroki czyszczenia do tearDown.
Możesz przeczytać więcej z przykładami tutaj .
Po zdefiniowaniu metody setUp () program uruchamiający testy uruchomi tę metodę przed każdym testem. Podobnie, jeśli zdefiniowano metodę tearDown (), moduł uruchamiający testy wywoła tę metodę po każdym teście.
Na przykład masz test, który wymaga istnienia elementów lub określonego stanu - więc umieszczasz te działania (tworzenie instancji obiektów, inicjowanie bazy danych, przygotowywanie reguł i tak dalej) do setUp.
Jak również wiesz, każdy test powinien zatrzymać się w miejscu, w którym został uruchomiony - oznacza to, że musimy przywrócić stan aplikacji do stanu początkowego - np. Zamknąć pliki, połączenia, usunąć nowo utworzone pozycje, wywołać zwrot transakcji itd. - wszystko to kroki mają zostać uwzględnione w tearDown.
Pomysł jest taki, że sam test powinien zawierać tylko akcje, które należy wykonać na obiekcie testowym, aby uzyskać wynik, podczas gdy setUp i tearDown to metody, które pomogą Ci pozostawić kod testowy czysty i elastyczny.
Możesz utworzyć setUp i tearDown dla kilku testów i zdefiniować je w klasie nadrzędnej - dzięki czemu łatwo byłoby wspierać takie testy i aktualizować typowe przygotowania i porządki.
Jeśli szukasz prostego przykładu, użyj poniższego linku z przykładem
Możesz ich użyć do wyodrębnienia kodu wspólnego dla wszystkich testów w zestawie testów.
Jeśli masz dużo powtórzonego kodu w swoich testach, możesz je skrócić, przenosząc ten kod do setUp / tearDown.
Możesz użyć tego do tworzenia danych testowych (np. Konfigurowania podróbek / mocków) lub usuwania funkcji za pomocą podróbek.
Jeśli przeprowadzasz testy integracyjne, możesz użyć funkcji sprawdzania warunków wstępnych środowiska w programie setUp i pominąć test, jeśli coś nie jest poprawnie skonfigurowane.
Na przykład:
class TurretTest(unittest.TestCase):
def setUp(self):
self.turret_factory = TurretFactory()
self.turret = self.turret_factory.CreateTurret()
def test_turret_is_on_by_default(self):
self.assertEquals(True, self.turret.is_on())
def test_turret_turns_can_be_turned_off(self):
self.turret.turn_off()
self.assertEquals(False, self.turret.is_on())
Załóżmy, że masz pakiet z 10 testami. 8 testów ma ten sam kod konfiguracji / dezaktywacji. Pozostałe 2 nie.
konfiguracja i porzucenie zapewniają przyjemny sposób na refaktoryzację tych 8 testów. Co teraz robisz z pozostałymi 2 testami? Przenieślibyś je do innego przypadku / zestawu testowego. Tak więc użycie konfiguracji i porzucenia pomaga również w naturalny sposób podzielić testy na przypadki / zestawy