Testy kontrolera vs testy integracyjne

0

Cześć, mam sporo prostych pytań, ale póki co ograniczyłbym się do trzech. Dzięki za pomoc.

Poprzez controller mam na myśli springowy rest controller.

  1. Czym się różnią testy kontrolera od testów integracyjnych? Oprócz tego, że to pierwsze działa na mock mvc, a to drugie na http cliencie?

  2. Czy test kontrolera powinien ładować cały context springa, czy mockować serwisy?

  3. Mam @Valid na kontrolerach, a na fieldach w dto mam np. @NotNull. Chciałbym testować tę walidację, tzn. jeśli jakiś field z request dto nie spełnia walidacji, to ma polecieć HTTP 400. Robić w testach kontrolera czy integracyjnych?

1
  1. Testy integracyjne są bliższe działaniu aplikacji na produkcji, testujesz wszystkie warstwy od góry do dołu. Testy kontrolerów to tylko wycinek całości, w dodatku można je skonfigurować tak, żeby nie odpowiadały produkcji np. nie rejestrując wszystkich filtrów itd.
  2. Najlepiej nie używać testów kontrolerów, bo tak jak napisałem dają fałszywe poczucie bezpieczeństwa.
  3. Chyba już znasz odpowiedz.
0

Dzięki @Charles_Ray :)

  1. A co konkretnie powinny zawierać testy integracyjne?

Rozumiem, że koniec końców chodzi o zwracane kody http, ale co powinienem wyróżnić jako składowe testów integracyjnych? :P

Czyli jeśli w testach integracyjnych będę miał:

  • autoryzacje i autentykacje (np. nie jesteś zalogowany => to test czy leci 401)
  • walidacje requestów (np. test czy zwraca 400 jak @NotNull jest nullem)
  • patrzenie czy response body faktycznie jest takie jakie miało być (nie chodzi mi o testy logiki)

To nie będzie to "WTF"?

  1. Czy testy integracyjne powinny działać na preloadowanej bazie na potrzeby testów, np. testcontainers?

  2. Ewentualnie jak zrobię h2 zamiast powiedzmy postgresa na testcontainers to będzie to duży problem? Mowa o prostym crudzie.

3

Czy testy integracyjne powinny działać na preloadowanej bazie na potrzeby testów, np. testcontainers?

Tak

Ewentualnie jak zrobię h2 zamiast powiedzmy postgresa na testcontainers to będzie to duży problem? Mowa o prostym crudzie.

Będzie mniejszy problem bo korzystasz z tej samej bazy danych co na prodzie. Różnicę widac jak korzystasz z normalnego SQLa a nie (tylko) jakiegoś JPA

1

@Xorxorxor: zapraszam github.com/Pharisaeus/almost-s3 :P
Kwestia h2 vs testcontainers to generalnie pytanie o szybkość vs dokładność. Jeśli używasz tylko "standardowego" sqla to pewnie nie będzie to miało znaczenia. Ale jak zaczniesz używać czegoś customowego ze swojej konkretnej bazy to moze być różnie.

1

A co konkretnie powinny zawierać testy integracyjne?

Zakładając, że mamy stan X, kiedy zrobimy Y, spodziewamy się, że zajdzie Z.

Najlepiej potraktować aplikacje jako totalny blackbox i na końcu assertować zwrotkę z endpointa, czyli nawet nie grzebać w bazie.

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