- Nie jest to żadna profanacja, to jest zupełnie normalne podejście jeśli chcesz testować
implementacje
, tzn sprawdzać czy dany kawałek kodu/obiekt/metoda
zachowuje sie tak jak powinien.
O, to super - właśnie do czegoś takiego potrzebne mi są te konkretne testy, o które spytałem. Zdaję sobie sprawę, że do przetestowania jeszcze będzie system w szerszym kontekście, ale przygotuję do tego inną suitę testową.
- Pamiętaj tylko, że takie testy wcale nie znaczą że
funkcja systemu
działa, bo właśnie ominąłeś sporą część aplikacji żeby "dojść" do tego serwisu. Przetestowałes jakąśtam metodę jakiegoś obiektu, ale ta metoda w ogóle może nigdy nie być wywoływana ;) Nie mówiąc o już o takich rzeczach jak jakieś Auth czy CORS. Dlatego ja osobiście sugerowałbym jednak testować jak się zachowuje cały system (czyli wstać aplikacje i stukać do niej klientem) a takie testy kodu
zostawić dla konkretnych sytuacji gdzie jest złożona logika którą chcesz dokładniej sprawdzić (np. masz tam jakiś parser). Pamiętaj że generalnie testami chcesz sprawdzać kod jaki faktycznie będzie potem działać na produkcji, a teraz testujesz jak się zachowa new Serwis1(new Serwis2());
.
W zasadzie trafiłeś w dychę z tymi parserami - dokładnie do czegoś takiego potrzebne mi są te testy. Mam jakieś różne implementacje parserów, formatterów etc., które obsługują trochę inaczej spreparowane dane i te testy pisałem na potrzeby sprawdzenia ich zachowania w przypadku danych prawidłowych, danych niekompletnych, danych popsutych itd. Tego Springa mam tam generalnie tylko po to, żeby procesowane w backendzie dane wyświetlać na froncie i udostepniać endpointy GETowe do oglądania ich. Czemu Spring? Nie znam niczego innego, a i wyklikanie szablonu projektu i autokonfiguracja znacznie ułatwiła mi sprawę i pozwoliła przejść do rozwiązywania clue problemu. A sam backend mógłby się obejść bez Springa, bo korzystam tam tylko z @Service
i @Autowired
i cały proces transformowania danych odbywa się niezależnie od requestu HTTP. Nie ma sensu wchodzić za bardzo w szczegóły, bo nawet może to nikogo nie interesować, ale zmierzam do tego, że Auth
itd po prostu tam nie istnieje. Toteż cięższe testy z kontekstem Springowym zostawiłbym sobie do przetestowania bardzo ograniczonej liczby możliwości interakcji użytkownika z systemem. Nie łączę się też z żadną bazą danych (chociaż może w przyszłości dojdzie tam taka funkcjonalność i wtedy wzrośnie liczba testów @SpringBootowych
.
Chyba wszyscy mnie utwierdziliście w przekonaniu, że to rozwiązanie jest spoko. W międzyczasie znalazłem też kilka wypowiedzi na SO, których autorzy również zalecali ograniczenie stawiania kontekstu springa do testów, gdzie ten kontekst coś wnosi. Zatem zostawiam istniejące testy tak jak są i biorę się za pokrywanie reszty kodu. Dzięki wielkie wam za szybkie odpowiedzi! :)