Python Autospec kpiący

Python Autospec kpiący
„Podczas opracowywania testów kpiny, a także kpiny są niezwykle pomocne, ponieważ umożliwiają oddzielenie odniesienia od jego zależności, co powoduje mniej kruche testy. Uwzględniając kpiny do testów jednostkowych, możemy być pewni, że wszelkie awarie będą spowodowane modyfikacją sposobu wdrażania celu testu. Konfiguracja próbek może jednak skutkować testami, które przechodzą, gdy muszą się nie udać. W tym artykule będziemy używać kilku przykładów ilustrujących działanie kpiny z Autospace w Pythonie."

Przykład 01

Zacznijmy od pierwszej ilustracji. Kalkulator.Moduł PY zawiera kolejne wiersze kodu. W pierwszym wierszu zdefiniowaliśmy dodanie funkcji i pomnożeliśmy dla kalkulatora klasy. Dwie liczby są mnożone razem przy użyciu drugiej funkcji o nazwie „Mnożenie”; Podobnie, pierwsza funkcja jest używana do uzyskania suma dwóch liczb. Obie funkcje zwracają tylko dodanie i niektóre dostarczone liczby; Nie drukują żadnych wyjściowych.

Zbudowaliśmy dwie funkcje modułów poza klasą, w której tworzone są obiekty klasy typu kalkulatora, a metody dodawania i mnożenia klasy kalkulatora są wywoływane. Sprawdź kod na zdjęciu przymocowanym.

Suma i mnożenie funkcji z kalkulatora.Moduł PY będzie używany w prostym module, który konstruujemy, kalkulator testowy.py. Kod jest niezwykle prosty; Po prostu importujemy metody mnożenia i sumowania z modułu kalkulatora. Następnie przeprowadziliśmy funkcję SUM i dostarczyliśmy parametry 2 i 5.

Podobne do sposobu, w jaki nazywaliśmy funkcję mnożenia, przekazaliśmy parametry 5 i 3 do tej funkcji modułu. Korzystając z instrukcji drukowania, wyświetlamy dane wyjściowe, które zwracają te funkcje. Sprawdź kod na zdjęciu przymocowanym.

Uruchom test_calculator.Moduł PY w tym momencie, aby zobaczyć wyniki. Chociaż możesz użyć dowolnego innego narzędzia, piszemy i uruchamiamy kod za pomocą narzędzia Spyder 3. Wyjście w terminalu narzędzi Spyder jest widoczne, jak widać. Za pomocą kalkulatora.klasa PY, wyjście mnożenia funkcji wynosi 15, a jej wyjście suma wynosi 7, co jest zamierzonym wynikiem.

Przykład 02

Teraz idziemy do testu na sumę i mnożenie, ale załóżmy, że musimy kpią z funkcji dodawania i mnożenia. Kupowanie i kpiny są bardzo przydatne, gdy piszemy testy dla naszych modułów, ponieważ pozwalają nam odizolować cele testowe od ich zależności, które powodują mniej kruche testy. Jeśli zastosujemy próby w naszych testach jednostkowych, wszelkie testy, które się nie powiedzie, z powodu modyfikacji dokonanej wdrożenia celu.

Możemy jednak zbudować makietę w sposób, który może zapobiec awarii testów, gdy powinny! Uaktualnijmy nasz test_calculator.Moduł PY, aby dodać do niego kod makiety. Migawka kodu pokazano poniżej:

Po wykonaniu ten łatwy test się powiódł. Określenie pociąga za sobą budowanie próbnego obiektu o tym samym interfejsie API/strukturze co wyśmiewany obiekt, który zawiedzie, jeśli zostanie użyty w sposób, który odbiega od specyfikacji. Funkcja create_autospec w próbnym module jest pierwszą z dwóch metod tego osiągnięcia. Skonstruujmy próbny obiekt za pomocą specyfikacji danej funkcji. Sprawdź kod na zdjęciu przymocowanym.

Używając innego obiektu jako specyfikacji, wytwarzany jest próbny obiekt za pomocą funkcji Utwórz Autospec. Podpis wszystkich funkcji wywoływanych na próbce jest weryfikowany jako pierwszy. Jest to korzystne, ponieważ funkcja pozorna opiera się teraz na prawdziwej implementacji, a my napotkamy problem, jeśli wersja się zmieni, a kalkulator nie szanuje podpisów osób pozostających na utrzymaniu.

Kiedy uruchamiamy powyższy kod dla testu jednostkowego, nie znajdujemy żadnego błędu podczas wykonywania. Oznacza to, że zdaliśmy test. Teraz zaktualizowaliśmy kod i dodaliśmy tylko kilka wierszy. Przeszliśmy funkcję mnożenia do funkcji create_autospace i zapisaliśmy dane wyjściowe z mnożenia. Sprawdź kod na zdjęciu przymocowanym.

Kiedy wywołujemy funkcję, aby pomnożyć z jednym parametrem i wykonać kod, podnosi błąd na ekranie wyjściowym, jak podano poniżej:

Jeśli nie przekazamy żadnego parametru do tej funkcji, prosi użytkownika o wprowadzenie wartości NUM1 i NUM2. Sprawdź kod na zdjęciu przymocowanym.

Oto zrzut ekranu wykonywania kodu:

Kiedy przekazujemy oba argumenty NUM1 i NUM2, powyższy test jest pomyślnie wykonywany; Zmiany w kodach można zobaczyć na poniższym ekranie:

Jak wcześniej omówiliśmy, create_autospec to jedna metoda tego robienia, ale inna jest ustawienie Autospec = true podczas używania dekoratora łatek do symulacji obiektu. Wrócimy do modułu test_calculatora i zaktualizujemy kod, jak podano poniżej zrzut ekranu. Pierwsze dwie linie zostały już wykorzystane w kilku przypadkach. Nazwa funkcji modułu i wartość prawdziwej dla automatycznego.Metoda ścieżki w trzeciej linii kodu.

W prawej poniżej zdefiniowaliśmy funkcję, która jest nazywana testem_multiply, w której przekazaliśmy zmienną obiektu próbnego; Później musimy użyć tej samej zmiennej, aby wywołać funkcję mnożenia. W tym kodzie jest linia zawierająca błąd, który jest 6th linia, ponieważ musimy użyć funkcji makiety do działania zamiast bezpośrednio za pomocą funkcji mnożenia. Sprawdź kod na zdjęciu przymocowanym.

Oto zaktualizowany kod. Po uruchomieniu tego testu jednostkowego nie otrzymujemy żadnego błędu, co oznacza, że ​​ten test jest przekazywany. Sprawdź kod na zdjęciu przymocowanym.

Wniosek

Chodzi o użycie Python Autospec, kpiących się w niektórych naszych przykładach Python wykonanych w narzędziu Spyder 3 Python. Wszystkie przykłady użyte w tym artykule są łatwe do zrobienia i nauczenia. Spróbuj więc nie przegapić żadnego z nich, aby uzyskać lepsze zrozumienie.