Wpis z mikrobloga

Mireczki mam pytanie dotyczące pisania testów.

Mam aplikację w arcitekturzepackage per feature. 2 moduły, każdy z nich wystawia jedynie publiczną fasadę i jakieś dto (reszta pakietowa).
Chciałbym teraz taką fasadę przetestować unitowo bez żadnych baz danych itp.
Problem w tym, że moduł nr 1 korzysta z fasady modułu nr 2 (ma ją w swoich zależnościach).
1) Czy w takim razie testując moduł nr 1 powinienem zamockować moduł 2 i potem odwrotnie - testując moduł 2 powinienem zamockować moduł 1?
2) Czy męczyć się ręcznie i w palca tworzyć wszystkie zależności?
Kłóci mi się to ze stwierdzeniem, że unit testy modułów powinny odbywać się w izolacji.

#java #spring #springboot #programowanie #programista15k #testowanieoprogramowania
  • 13
@Generyczny_nick:

Chciałbym teraz taką fasadę przetestować unitowo bez żadnych baz danych itp.

dlaczego?

Chcesz testować aplikację, a nie jakiś mały jej wycinek.

Czy męczyć się ręcznie i w palca tworzyć wszystkie zależności?


Jeśli musisz się męczyć, to znaczy, że problem jest gdzieś indziej. Normalnie złożenie modułów nie powinno być problemem.

Kłóci mi się to ze stwierdzeniem, że unit testy modułów powinny odbywać się w izolacji.


Olej to stwierdzenie, to już nie
@krasnoludkolo: bo na integracyjne z bazą in memory przyjdzie czas, teraz chciałbym zrobić podstawowe, szybkie testy per moduł.
To nie kwestia tego, że teraz byłoby ciężko jakoś bardzo (chociaż już musiałbym kilka klas tworzyć ręcznie itp) tylko ogólnie taktyki którą powinienem obrać.
@Generyczny_nick: testowanie modułów odzielnie z mockami ma sens, ale jest to strasznie upierdliwe. W normalnych aplikacjach masz tak, że często zmiana z jednego modułu wpływa na zmianę tego drugiego i wtedy takie mocki są bez sensu, bo piszesz testy dla przypadku, który nie istnieje w naturze (wołanie modułu A bez modułu B w pełnej izolacji). Oczywiście z perspektywy modułowości to pięknie wygląda, ale życie wygląda tak, że najlepsze testy to takie,
@Generyczny_nick: Ja jestem zwolennikiem małych testów walidujących działanie nawet pojedynczych metod, testów jednostkowych. Do tego nie potrzebujesz drugiego modułu.
Tak, by przetestować jeden z nich, mokujesz drugi. Oba na raz z mockiem zewnętrznych zależności.
Integracyjny, przez całą apkę, z h2 ale te testy trwają długo (kilka sekund to długo) więc nie powinno ich być dużo, za to powinny testować możliwe dużo a min, krytyczne funkcjonalności systemu.
@krasnoludkolo: Sam test może. Ja mówię o całym czasie od momentu uruchomienia testu do wyniku. Sam kontekst spring-a wstaje od kilku sekund (czysty springboot) do kilku minut (aplikacje 'enterprise') a to, że test trwał mniej niż sekundę już nie ma znaczenia, bo ja zdążyłem zmienić kontekst i wrócę do wyniku jak skończę nowy task...