Pytania odnośnie testów w aplikacjach Spring MVC / REST

Pytania odnośnie testów w aplikacjach Spring MVC / REST
P4
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:9
0

Witam,
Może na wstępie napiszę, że korzystałem już z JUnit4 do testowania aplikacji desktopowych w Jave, próbowałem też trochę TDD i coś tam wiem w tym temacie. Postanowiłem w końcu nauczyć się pisać testy dla aplikacji korzystających ze Spring MVC / REST. Mam kilka pytań:

  1. O ile dobrze rozumiem, to testy jednostkowe będą obejmowały warstwę Serwisu, która czy w REST czy w MVC będzie niemal identyczna.
  2. Czy testowanie kontrolerów to jeszcze testy jednostkowe czy jednak już integracyjne.
  3. Wiem, że muszę skorzystać z biblioteki Mockito, ale większość przykładów na jakie trafiłem nie rozwiała moich wątpliwości. Rozumiem, że kiedy korzystam ze Spring Data to powinienem sobie darować testowanie metod, które jedynie wywołują metody z repozytorium. A co kiedy np. przed zapisem modyfikuję obiekt, ustawiając mu status, dodając mu właściciela itp. Czy taka metoda nadaje się już do testowania? Czy znacie jakieś źródło w którym jest to przystępnie wytłumaczone?

Z góry dziękuję za pomoc.

KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0

Wiem, że muszę skorzystać z biblioteki Mockito

Nie musisz. Kiedyś napisałem cały mikroservice z testami jednostkowymi i integracyjnymi bez użycia Mockito. Wszystkie fake'i i stuby pisałem ręcznie. Nie że nie umiem używać Mockito, po prostu nie lubię.


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 1x, ostatnio: KamilAdam
V2
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:52
0
  1. Tak jednostkowe głównie obejmują logikę biznesową serwisów.
  2. Testowanie kontrolerów to testy integracyjne. Tak nawet mówi dokumentacja springa. Z drugiej strony wiele osób nie lubi tego podziału i zaraz pewnie mnie zlinczują. Musisz sam wyrobić sobie opinię.
  3. Mockowanie przydaje się głównie w dużych aplikacjach, gdy nie chcesz wywoływać jakiegoś obcego web serwisu. tylko zwracasz spodziewany wynik. Większość testów możesz robić w H2.
KR
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:6
0

W przypadku kontrolerów i Spring Data duża część logiki będzie umieszczona w anotacjach - tego nie przetestuje się testem jednostkowym, więc faktycznie jeśli chce się testować porządnie te warstwy to potrzebne będą testy integracyjne. Dla mnie osobiście wielkie rozdzielanie jednostkowe/integracyjne nie ma wielkiego znaczenia - zgadzam się, że wszystkie cechy integracyjnych testów zostają (są wolniejsze, mogą "kłamać" - przechodzić kiedy kod na produkcji nie zadziała albo nie przechodzić, kiedy wszystko jest z kodem w porządku), ale dla mnie korzyści z dodawania tych testów i traktowania ich jak jednostkowe są dużo większe niż ich brak albo zaniedbywanie. Inna sprawa, że słowo "integracyjny" może co innego znaczyć dla testerów i deweloperów (odpalanie całej aplikacji z serwerem i wysyłanie zapytań oraz odpalanie tylko części kontekstu springowego z jakimś MockMVC)

Twój przykład ze Spring Data jest niezły - po swojej stronie masz tylko interfejs, pewnie jakieś anotacje na klasach i to wszystko. Skąd jednak masz pewność, że dane w bazie zapiszą Ci się i odczytają tak, jak chcesz (czy nie leci za dużo zapytań albo jakaś relacja w JPA jest jednak źle zmapowana).

Co do mocków - Mockito (albo inne biblioteki) przydaje się raczej w testach jednostkowych, kiedy sprawdzasz jak Twoja "jednostka" czyli klasa współpracuje z innymi. Zamiast uruchamiać Twoją klasę z prawdziwymi instancjami współpracowników podajesz jej mocki, które możesz kontrolować.

edytowany 1x, ostatnio: krzs

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.