Czy test kontrolera to test integracyjny czy jeszcze inny ?

0

No właśnie czy test z użyciem mockMvc to jest test integracyjny czy e2e?

W projekcie powinniśmy mieć więcej testów jednostkowych na poziomie serwisów/fasad czy takich, które testują kontrolery?
Logika zakłada, że integracyjne sprawdzą więcej. Gdzie się powinno testować więcej corner case?

U nas CTO woli skupiać się na integracyjnych bo one wychwycą więcej błędów (brak adnotacji lomboka i babole z serializacją/deserializacją np).

4

test z użyciem mockMvc to jest test integracyjny czy e2e

Ani jednym ani drugim. Jest testem bezużytecznym
Wystartuj aplikacje z bazami in-memory, konfigurowalnymi wiremockami zamiast zależnych webserwisów i stuknij do niej prawdziwym klientem HTTP, wtedy masz test integracyjny. Jak uruchomisz aplikacje na środowisku które jest takie samo jak produkcja, z prawdziwymi bazami itd to wtedy masz e2e.

Moim zdaniem testy jednostkowe maja sens tylko tam gdzie faktycznie masz jakiś bardzo konkretny fragment logiki który chcesz testować niezaleznie od całej reszty. Np. robisz jakiś scheduler/executor i masz sortowanie topologiczne wg pewnych kryteriów i chcesz zrobić testy tego sortowania, w oderwaniu od całej reszty (czyli np. submitowania jobów, samego wykonywania itd).

0

Dlaczego beużytecznym?

Przy takim teście z mockMvc przecież stawiam sobie bazę h2, więc mam przelot przez apkę.
Co lepszego da mi proponowane przez Ciebie rozwiązanie?

Wychodzi na to, że piramida testów to gówna prawda i lepiej mieć dobre testy integracyjne niż jednostkowe :D

1

Dlaczego beużytecznym?

Bo to jest taki niby test integracyjny, ale jednak pomijasz, z niewiadomych przyczyn, spory kawałek związany z komunikacją :) A potem jest surprised pikachu face że np. nie działa CORS albo nie działa authentication.

0

A Spring nie ma prawdziwego klienta HTTP ? Zawsze mi się wydawało, że tam wszystkie jest już z pudełka.
A CORSy akurat mamy po stronie API Gateway.

0

A Spring nie ma prawdziwego klienta HTTP

Ma Spring RestTemplate, ale i tak generalnie do testów chciałbyś chyba mieć biznesowego klienta? :) Tzn klasę która chowa przed użytkownikiem takie bzdury jak nazwy endpointów czy mapowanie odpowiedzi z JSONa do DTO. Ja generalnie w każdym serwisie taką mam, dzięki czemu potem w testach robie po prostu:

Either<RestRequestFailure, SomethingDTO> result = client.getXYZ(id, token)

Taki klient może być też używany przez inne serwisy które z mojego korzystają, przez testy e2e itd.

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