Autor wpisu: Piotr Śliwa, dodany: 04.10.2010 19:11, tagi: php
Jakiś czas temu pracowałem nad projektem, którego funkcjonalności były oparte na wykorzystywaniu usług sieciowych o podobnej funkcjonalności. Pierwszym krokiem było ujednolicenie interfejsów tych usług. Na podstawie jednej z usług tworzyłem prosty interfejs, który później zaimplementowałem również dla pozostałych. Pierwszym krokiem było zastosowanie wzorca Facade, aby uprościć na potrzeby aplikacji interfejs pierwszej usługi sieciowej. Następnie pozostałe usługi sieciowe również zaadaptowałem do tego nowego interfejsu, wykorzystując wzorzec Adapter. Adapter od Facade różni się tym, że adapter przystosowuje zewnętrzny obiekt (zbiór obiektów) o podobnym interfejsie do już istniejącego, a fasada obudowuje złożony interfejs nowym, prostszym w użyciu. Ten wpis nie jest jednak o Adapterze (pisałem już o nim tutaj), ani o Facade, a o Service Stub.
Pewnego pięknego weekendu chciałem nadrobić zaległości budując kolejne funkcjonalności w serwisie wokół tych usług sieciowych. W tym projekcie w warstwie integracji z web services zastosowałem programowanie sterowane testami. Niestety w piątek po powrocie do domu, zastałem awarię internetu (która, jak się okazało, trwała do poniedziałku). Myślałem, że z moich planów nic nie wyniknie, ale postanowiłem skorzystać z wzorca Service Stub, czyli usługi zastępczej. Napisałem adapter usługi sieciowej, który przetrzymuje dane w pamięci i przechodzi wszystkie testy dla pierwszego z adapterów usług sieciowych. Dzięki temu mogłem pisać kolejne funkcjonalności serwisu, gdyż miałem adapter "zdalnej usługi", który działał zgodnie z założeniami.
Jaka jest istota Service Stub? Chodzi o zastąpienie zdalnej usługi sieciowej wywoływaniami lokalnymi, w celu przyspieszenia wykonywania testów jednostkowych. Jak widać na załączonym przykładzie, przyspieszenie wykonywania testów to nie jedyna korzyść z zastosowania tego wzorca.
Nie ma co się więcej rozpisywać o tym wzorcu, gdyż jest on bardzo prosty. Odsyłam do opisu Service Stub z katalogu Martina Fowlera oraz ciekawego artykułu Mocks Aren't Stubs, który pokazuje inne podejście do pisania testów, a mianowicie testowanie oparte na weryfikacji zachowania, a nie weryfikacji stanu.