Atrapa obiektu (ang. mock object) – symulowany obiekt, który w kontrolowany sposób naśladuje zachowanie rzeczywistego obiektu. Programista tworzy zazwyczaj atrapy obiektów w celu przetestowania zachowania jakiegoś innego obiektu, podobnie jak projektanci samochodów wykorzystują manekiny do symulacji dynamiki zachowania ludzkiego ciała podczas zderzenia pojazdów.

Przyczyny użycia edytuj

W testach jednostkowych, atrapy obiektów mogą symulować zachowanie złożonych obiektów rzeczywistych, co jest przydatne, gdy rzeczywistego obiektu nie można użyć w teście jednostkowym (lub gdy jest to niepraktyczne). Jeśli obiekt ma jedną z poniższych cech, warto rozważyć użycie w jego miejsce atrapy:

  • zwracanie niedeterministycznych wyników (np. aktualnego czasu lub temperatury),
  • ma stany, które są trudne do wywołania lub zreplikowania (np. błąd sieciowy),
  • jest powolny (np. kompletna baza danych, wymagająca inicjalizacji przed testem),
  • jeszcze nie istnieje lub jego zachowanie może się zmienić,
  • wymagałby dołączenia informacji i metod przeznaczonych wyłącznie do testów, a nie do realizacji celu, dla którego powstał.

Na przykład program budzika uruchamiający dzwonek o określonej godzinie może pobierać aktualny czas z zewnątrz. Aby go przetestować test musiałby oczekiwać na nastanie godziny alarmu, aby zweryfikować, czy budzik zadzwoni. W tej sytuacji użycie atrapy obiektu zaprogramowanej tak, aby zwracała godzinę alarmu jako aktualny czas niezależnie od tego, czy jest to właściwa godzina, czy nie, pozwoliłoby przetestować program budzika w izolacji.

Szczegóły techniczne edytuj

Atrapy obiektów posiadają taki sam interfejs jak obiekty, które naśladują. Dzięki temu obiekt, który je wykorzystuje, nie musi wiedzieć, czy używa atrapy, czy rzeczywistego obiektu. Wiele dostępnych frameworków atrap obiektów pozwala programiście na określenie, które metody będą wywoływane na atrapie, w jakiej kolejności oraz jakie parametry zostaną im przekazane, a jakie wartości zwrócone. Dzięki temu zachowanie złożonego obiektu (takiego jak gniazdo sieciowe) może być naśladowane przez atrapę, pozwalając tym samym programiście sprawdzić, czy testowany obiekt właściwie reaguje na szeroki zakres stanów, w których może znaleźć się obiekt atrapy.

Ograniczenia edytuj

Atrapy obiektów powinny wiernie modelować zachowanie obiektu, który naśladują, co może być trudne do osiągnięcia, gdy naśladowany obiekt pochodzi od innego dewelopera, z innego projektu albo w ogóle nie został jeszcze napisany. Jeśli jednak atrapa nie będzie właściwie modelowała zachowania naśladowanego obiektu, może się okazać, że w czasie pracy programu wystąpi błąd, pomimo że w tych samych warunkach testy jednostkowe kończyły się powodzeniem (co oczywiście oznacza, że testy są nierzetelne)[1].

Zobacz też edytuj

Przypisy edytuj

  1. InJava.com to Mocking | O'Reilly Media

Linki zewnętrzne edytuj