Zpo-3-wyk-Slajd37: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 1: Linia 1:
==Testowanie z użyciem obiektów zastępczych==
==Obiekt zastępczy==


[[Image:zpo-3-wyk-Slajd37.PNG|Testowanie z użyciem obiektów zastępczych]]
[[Image:zpo-3-wyk-Slajd37.PNG|Obiekt zastępczy]]




Rozwiązaniem jest zastąpienie dla potrzeb przypadku testowego obiektu zależnego przez obiekt zastępczy (ang. ''mock'' ''object'' ). Obiekty zastępcze są pod względem typu identyczne jak obiekty zależne i są zamiennikami wystarczającymi dla potrzeb uruchomienia testu.  
Koncepcja obiektów zastępczych, zaproponowana przez Mackinnona i Freemana w 2000 roku, ma na celu rozwiązanie przedstawionych przed chwilą problemów związanych z testowaniem jednostkowym. Obiekt zastępczy posiada interfejs zastępowanego przez niego obiektu zależnego, a zatem może zastąpić go w interakcji z obiektem testowanym bez jakichkolwiek zmian w kodzie. Jest najprostszą możliwą implementacją obiektu zależnego, co oznacza, że nie wykonuje żadnych operacji, które nie są niezbędne z punktu widzenia obiektu testowanego. Zwykle jego działanie sprowadza się do zwracania poprzez jego metody określonych "na sztywno" wartości. Jest zatem prymitywnym naśladowcą obiektu zależnego.


W przypadku pokazanym na rysunku, obiekt połączenia z bazą danych jest zastąpiony przez obiekt zastępczy. Obiekt ten nie wykonuje żadnej operacji związanej z bazą danych, nie łączy się z nią ani nie wykonuje zapytań. Jego rola ogranicza się do naśladowania obiektu zależnego w takim tylko zakresie, jaki jest niezbędny do wykonania przypadku testowego.
Aby zdefiniować jego zachowanie, musi być konfigurowalny – można w nim określić wartości zwracane przez jego metody.


W stosunku do tradycyjnej procedury testowania, zmieniony jest krok 2. Zależności są spełniane nie przez obiekt testowany, ale przez klasę testującą, która przekazuje obiektowi testowanemu instancje obiektów zastępczych.
Wreszcie ostatnią własnością jest możliwość śledzenia interakcji z obiektem testowanym. Dzięki temu powstaje dodatkowa metoda weryfikacji zachowania obiektu testowanego: jeżeli wywoła on metody obiektu zastępczego niewłaściwą liczbę razy, nie zapyta o parametr, o który powinien zapytać – wówczas obiekt zastępczy może także zgłosić błąd, który będzie tożsamy z niespełnieniem asercji przypadku testowego.
 
Co ważne, obiekt zastępczy NIGDY nie zastępuje obiektu testowanego, a jedynie jego zależności. Celem jest przecież sprawdzenie, czy obiekt testowany zachowuje się poprawnie, więc użycie zamiast niego obiektu zastępczego nie ma sensu.




[[zpo-3-wyk-Slajd36 | << Poprzedni slajd]] | [[zpo-3-wyk-toc|Spis treści ]] | [[zpo-3-wyk-Slajd38 | Następny slajd >>]]
[[zpo-3-wyk-Slajd36 | << Poprzedni slajd]] | [[zpo-3-wyk-toc|Spis treści ]] | [[zpo-3-wyk-Slajd38 | Następny slajd >>]]

Aktualna wersja na dzień 21:54, 4 lis 2006

Obiekt zastępczy

Obiekt zastępczy


Koncepcja obiektów zastępczych, zaproponowana przez Mackinnona i Freemana w 2000 roku, ma na celu rozwiązanie przedstawionych przed chwilą problemów związanych z testowaniem jednostkowym. Obiekt zastępczy posiada interfejs zastępowanego przez niego obiektu zależnego, a zatem może zastąpić go w interakcji z obiektem testowanym bez jakichkolwiek zmian w kodzie. Jest najprostszą możliwą implementacją obiektu zależnego, co oznacza, że nie wykonuje żadnych operacji, które nie są niezbędne z punktu widzenia obiektu testowanego. Zwykle jego działanie sprowadza się do zwracania poprzez jego metody określonych "na sztywno" wartości. Jest zatem prymitywnym naśladowcą obiektu zależnego.

Aby zdefiniować jego zachowanie, musi być konfigurowalny – można w nim określić wartości zwracane przez jego metody.

Wreszcie ostatnią własnością jest możliwość śledzenia interakcji z obiektem testowanym. Dzięki temu powstaje dodatkowa metoda weryfikacji zachowania obiektu testowanego: jeżeli wywoła on metody obiektu zastępczego niewłaściwą liczbę razy, nie zapyta o parametr, o który powinien zapytać – wówczas obiekt zastępczy może także zgłosić błąd, który będzie tożsamy z niespełnieniem asercji przypadku testowego.


<< Poprzedni slajd | Spis treści | Następny slajd >>