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

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.

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ę.

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.
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ć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1