Terminarz jest narzędziem, które definiuje umowę Pythona dla logiki stan / wsparcia wielokrotnego użytku, głównie do jednostki badania. & Nbsp; Helper i logika adaptacja jest włączone, aby ułatwić do pisania własnych urządzeń za pomocą umowy urządzeń. Kod klej jest pod warunkiem, że sprawia, że za pomocą urządzeń, które spełniają umowy Lampy w UnitTest zgodnych testów łatwe i proste.
Dlaczego Lampy
Standardowy Python unittest.py zapewnia żadnego oczywistego sposobu wytwarzania i ponownego stanu potrzebne w przypadku testu innego niż poprzez wprowadzenie metody od klasy testowej. Ta waga słabo - złożone funkcje pomocnicze rozmnożeniowym hierarchię klasy test jest regularny wzór, kiedy to nastąpi. Szydząc jednocześnie doskonałe narzędzie nie sama zapobiec (i pomocnicy wyśmiewać skomplikowane rzeczy mogą się gromadzić w ten sam sposób, jeśli wprowadzone do klasy testowej).
Poprzez zdefiniowanie jednolitej umowy, gdzie pomocnicy nie mają zależność od klasy badanej dopuszczamy wszystkie regularne czynności higienicznych Kod nastąpić bez krzywym wpływem będąc w hierarchii klas, które jest modelowanie zupełnie inny rzeczy - czyli to, co pomocników na TestCase cierpieć z powodu.
O Lampy
Urządzenie reprezentuje jakiś stan. Każde urządzenie posiada atrybuty na to, że są specyficzne dla urządzenia. Na przykład, urządzenie reprezentujący katalog, który może być używany do plików tymczasowych mogą mieć atrybut "ścieżki".
Tworzenie Lampy
Minimalnie, podklasa Spotkań, zdefiniować setUp zainicjować swój stan i zaplanować porządki na kiedy Cleanup nazywa i gotowe:
>>> Import unittest
>>> import mecze
>>> Klasy NoddyFixture (fixtures.Fixture):
... Def setup (self):
... Super (NoddyFixture, self) .setUp ()
... Self.frobnozzle = 42
... Self.addCleanup (delattr, samo "frobnozzle")
To zainicjować frobnozzle gdy Instalator nazywa, i kiedy Cleanup nazywa się pozbyć atrybutu frobnozzle.
Jest pomocnikiem w celu dostosowania parę funkcji lub do Urządzeń. stawia wynik funkcji w fn_result:
>>> Import os.path
>>> Import shutil
>>> Import tempfile
>>> Setup_function def ():
... Powrót tempfile.mkdtemp ()
>>> Def teardown_function (oprawa):
... Shutil.rmtree (oprawa)
>>> Oprawa = fixtures.FunctionFixture (setup_function, teardown_function)
>>> Fixture.setUp ()
>>> Print os.path.isdir (fixture.fn_result)
Prawdziwy
>>> Fixture.cleanUp ()
Spotkań API
Powyższy przykład przedstawia niektóre API urządzenia. Aby móc posprzątać po Oprawa została wykorzystana, wszystkie urządzenia zdefiniować metodę Cleanup, które powinny być wywołana, gdy urządzenie jest wykończony.
Ponieważ dobrze jest być w stanie zbudować określony zestaw powiązanych opraw przed ich użyciem, uchwyty także zdefiniować metodę konfiguracji, które powinny być o nazwie przed próbą ich używać.
Jedno wspólne pragnienie z urządzeń, które są kosztowne, jest wykorzystanie ich w wielu przypadkach testowych; wspierać ten uchwyt bazowy określa również reset który wzywa self.cleanUp (); self.setUp (). Lampy, które mogą skuteczniej zgłosili się do wielokrotnego użytku należy zastąpić tę metodę. Następnie może być używany z wieloma stan testu poprzez rzeczy jak testresources, setUpClass lub setUpModule.
W przypadku korzystania z uchwytu z testu można ręcznie wywołać metody setup i czyszczenia. Wygodniej jest jednak użyć dołączonego kleju z fixtures.TestWithFixtures która przewiduje wstawką określającą useFixture (przypadek wielbłąda, ponieważ unittest jest wielbłądowi przypadku całej) metoda. Będzie Ustawienia połączeń na urządzeniu, zadzwoń self.addCleanup (osprzętu), aby zaplanować czyszczenie i zwrócić urządzenie. Dzięki temu jeden zapis:
>>> testtools importowe
>>> Import unittest
Zauważ, że używamy testtools tu TestCase musimy zagwarantować metodę TestCase.addCleanup.
& Nbsp; >>> klasy NoddyTest (testtools.TestCase, fixtures.TestWithFixtures):
& Nbsp; ... def test_example (self):
& Nbsp; ... Uchwyt = self.useFixture (NoddyFixture ())
& Nbsp; ... self.assertEqual (42, fixture.frobnozzle)
& Nbsp; >>> wynik = unittest.TestResult ()
. & Nbsp; >>> _ = NoddyTest ("test_example") prowadzony (wynik)
& Nbsp; >>> wydrukować result.wasSuccessful ()
& Nbsp; prawda
Lampy wdrożyć protokół kontekstowe, więc można również używać urządzenie jako kierownik kontekstowego:
>>> Z fixtures.FunctionFixture (setup_function, teardown_function) jako urządzenia:
... Druku os.path.isdir (fixture.fn_result)
True
Wymagania :
- Python
Komentarze nie znaleziono