Aktywne Wpisy
LatajacyOwad +4
W przypadku wojny, z przydział do jakiej roli byłby dla Ciebie najbardziej akceptowalny?
- Żołnierz wojsk powietrzno-desantowych 3.4% (19)
- Żołnierz piechoty 4.3% (24)
- Snajper 9.6% (54)
- Pilot drona bojowego 22.2% (125)
- Kierowca ciężarówki 4.3% (24)
- Kierowca transportera opancerzonego 0.9% (5)
- Człogista 2.8% (16)
- Kucharz 24.5% (138)
- Sanitariusz 4.6% (26)
- Logistyk 23.4% (132)
urarthone +81
News dnia to...
- CBA w Orlenie 38.3% (272)
- 100 fundacji zgarnia większość środków dla OPP 2.4% (17)
- "Słoneczko" z Teletubisi urodziła 8.0% (57)
- 500 tys. domów pali śmieciami 5.6% (40)
- Pol'and'Rock nie wróci do Kostrzyna 7.5% (53)
- Ze zdrowiem Kazika lepiej 2.7% (19)
- Ponad 10 tys. osób chce zostać gitarzystami 1.3% (9)
- Miss America lata F-16 7.2% (51)
- Zamieszanie z elektrownią jądrową w Polsce 27.1% (193)
Polecicie jakiś tutorial do pisania testów jednostkowych aplikacji w Springu? (Najlepiej przy użyciu JUnit, Mockito.)
Większość tutoriali o testach skupia się na samym JUnit albo o tym jak w teorii pisać testy.
Samego JUnita nauczyć się jest łatwo, a teorię o tym jak i co powinno się testować to potem sobie doczytam.
Nie ogarniam trzech rzeczy:
1. Całej tej otoczki Springowej. (Samego Springa bez testów znam.)
- Kiedy jakiego użyć Runnera (w ogóle co to i po co jest), jak uruchomić kontekst Springa (a co jak mam w innym module Mavenowym), jak użyć konfiguracji application.properties i plików z resources z projektu, a nie tylko z folderu test (bo nie chce kopiować wszystkiego i potem 2x zmieniać), ale jak móc mieć konfigurację do testów, w której nadpiszę tylko niektóre rzeczy; jak używać Mockito do mockowania beanów (a nie jak zwykłych klas) itd.
2. Co mockować przy funkcjonalnościach z IO?
- Przykładowo jakaś funkcjonalność, która coś zapisuje do bazy, coś zapisuje na dysk, pobiera coś REST-em i wykonuje pomiędzy tym jakąś logikę.
- Czy mam zamockować wszystko co wchodzi i wychodzi z aplikacji (np. metodę zapisu na dysk i udawać, że ona się zawsze udaje), żeby przetestować samą logikę? Mockować moje prywatne metody, które robią coś na IO czy bazowe metody (np. z bibliotek czy samej Javy)?
- A co jak logika jest bardzo prosta, a właśnie operacje IO są bardziej skomplikowane (np. przenoszenie jakiś plików, tworzenie folderów itd)? Mockując IO nie przetestuję tej logiki (np. że będzie duplikat nazwy pliku w folderze).
3. Testować kontrolery czy serwisy?
- Pisać test na serwis, który przyjmuje biznesowe obiekty czy mockować cały kontroler i udawać, że wysyłam zapytanie. To drugie jest dla mnie trudniejsze, bo muszę korzystać z mechanizmów Springowych do testów, których nie znam; ale widzę, że tak jest w większości tutoriali.
jeśli chodzi ci o SpringRunner.class to jest to skrócona wersja SpringJUnit4ClassRunner.class (patrz dokumentacja co to robi)
próbowałeś kombinować z @ActiveProfile && classpath?
ad 3.
każda warstwa powinna działać niezależnie więc testy jednostkowe też piszesz dla każdej warstwy, oddzielnie dla serwisu, repo,
Poczytałbym sobie taki tutorial/książkę/kurs lub jakiś projekt open source, to pewnie bym sam znalazł odpowiedź na większość pytań zamiast kogoś pytać o takie podstawy.
O jakimś runnerze jeszcze powinienem wiedzieć / któregoś używać? Bo który tutorial nie otworzę, to wszędzie jest co innego...
@RunWith(SpringRunner.class)
to mam kontekst Springowy, bo mam dostęp do beanów (tak mi się wydawało).Testy na każdą klasę?
- Ale tylko na każdą serwisową? Chyba nie na klasy modelu, entity, dto, enumów itd?
- A jak wydzieliłem jakąś klasę z innej (i nigdzie indziej jej nie używam), to też powinienem napisać do niej testy? Przecież pokrycie kodu testami będzie takie samo i funkcjonalność przetestowana taka
Modele,entity, dto i enumy zostana pokryte przy okazji pisania junitow na serwisy/controllery.
Nikt nie uzywa package privateow oprocz Ciebie, ale Ty uzywasz, wiec powinienes to pokryc.
Z tym testem na kazda klase to nie wiem o czym myslalem jak to pisalem xD
Jesli musisz uzywac powermocka to znaczy, ze cos #!$%@?, albo pracujesz na legacy - unikac.
Jeśli testujesz metodę kontrolera który wola serwis który jedyne co robi to wola repo żeby zapisać encje - robisz to źle. W ten sposób przetestowales czy spring działa. Pracownicy pivotala pewnie się ucieszą z dodatkowego testu ( ͡° ͜ʖ ͡°)
Kluczem nie jest 100% coverage-u tylko mądre przetestowanie funkcjonalności, logiki biznesowej