Pozdrowienia Stackoverflowers,Gniazda do testowania urządzeń
Mam aplikację, w której istnieje warstwa abstrakcji komunikacji. Każda implementacja w tej warstwie, o nazwie ,, zapewnia mojej aplikacji sposób wymiany danych z podłączonym urządzeniem równorzędnym (np .: poprzez HTTP, gniazda TCP, gniazda UDP itp.).
Na przykład, mam Connector_Tcp
klasy, która implementuje metody takie jak odczytane, zapisu, otwarty i bliską.
Potrzebuję napisać test jednostkowy dla tej klasy. Wiem, że testy jednostkowe powinny mieć jak najmniej zależności. Niestety, w tym przypadku zależność jest zasobem systemowym: gniazdem; i nie mogę tego obejść.
Potrzebuję porady, jak postępować w sprawie testowania jednostki tej klasy.
Moim zdaniem, chociaż ta klasa jest użycie zasobów systemowych, powinno być badane jak wszystkie inne złączy aby upewnić się, że nie narusza normę ustaloną przez mojego wniosku.
Obawiam się, że takie rzeczy jak kolizje wiążące (Adres już w użyciu błędy) i blokowanie. Nie chcę, aby test jednostki zakończył się niepowodzeniem, ponieważ port jest już używany przez usługę systemową, która nie ma nic wspólnego z moją aplikacją.
W moich czasach wykonałem wiele testów jednostkowych, ale żadna z nich nie opiera się na takich zasobach niskiego poziomu, które są gniazdami.
Co powiesz na testowanie jednostki w klasie zależnej od gniazda? Otworzyć gniazdo dla każdej jednostki? Użyj klasy pojedynczego serwera, a następnie ręcznie zdefiniowanego zasobu gniazda, aby się z nim połączyć i przetestować ...?
Chyba naprawdę mój problem jest następujący:
Jeśli test nie powiedzie się jednostka ... Jak mogę sprawdzić, czy:
- Gniazdo jest już używany przez inny proces;
- Test jednostkowy jest źle napisany; lub
- Metoda zachowuje się niepoprawnie (co jest wartością testu jednostkowego).
muszę testów jednostkowych do testowania tylko wtedy, gdy metoda została zachowuje się prawidłowo, czy nie ...
Nie zrobiłem żadnego prawdziwego rozwoju PHP, ale czy możesz stworzyć fałszywą klasę wywodzącą się z twojej klasy Socket? – Dave
@Dave: Mogę. Używam symulowanych obiektów dla każdej klasy, która wymaga złącza. Mój problem tutaj: muszę przetestować samą klasę socket, aby upewnić się, że respektuje konwencje warstwy abstrakcji ... Testując próbny obiekt, nie mówi mi jednoznacznie, czy klasa gniazda działa, czy nie. – netcoder
Istnieje praktyczna granica tego, co można testować jednostkowo w mojej opinii. Nie próbowałbym testować gniazda w urządzeniu. Przypuszczam, że w twoim przypadku, ponieważ gniazdo może być dostępne poza twoją aplikacją, po prostu musisz zrobić, co możesz, aby napisać testy jednostkowe wokół złącza i upewnić się, że obsługuje on wszystkie wyjątkowe warunki. Wspomniałeś o błędach "adres jest już w użyciu", więc chciałbym się upewnić, że mój konektor nie umrze tylko z powodu tego stanu. Zrobiłbym test jednostkowy, by stworzyć ten warunek i upewnić się, że go złapie. – Dave