A mocki to kolejne przekleństwo "enterprise" w javie. Dzieki nim można 100% napisać mnóstwo testów, które się nie wywalą się nawet jak usuniesz implementację metod z logiki. Ukochane narzędzie konsultantów i firm zewnętrznych wciskających Ci "super profesjonalny" kod.
(Btw. mockowanie IO czy tego typu rzeczy rozumiem, ale już np. nie ogarniam mockowania sobie własnej bazy danych, repo..., albo testujemy co ten kod robi albo udajemy).
Hmm. To ja zupełnie inaczej rozumiem testowanie... Może mam błędne przeświadczenie, ale moje testy teraz wyglądają np. tak.
Przyjmijmy, że mamy metodę:
Optional<Person> getPerson(Integer brainId);
i ta metoda używa w sobie repository ktore wyciąga jakąś składową człowieka ( mózg ) po id.
i na jego podstawie za pomocą jakiejś własnej logiki tworzy człowieka.
- Piszę test na tą logikę getPerson.
a) mockuję wyciąganie mózgu z bazy
b) sprawdzam czy dla wyciagnietego mozgu został prawidłowo stworzony człowiek
- Piszę test akceptacyjny BDD typu
given: mozg id 10
when: getPerson
then: person data shoud be x y z
Akceptacyjny już bez mockowania bazy.
Ewentualnie jak ten mock nie odnosi sie do bazy tylko do jakiejs zaleznosci posiadającej logikę (np. jakiś parser)
to wtedy piszę na tą zależność osobny unit test.
Jak padnie akceptacyjny to padnie też unitowy i mogę szybko zlokalizować błąd.
Jak padnie akceptacyjny a nie padnie junit to błąd leży w elemencie zamockowanym czyli repository, taka sytuacja jednak zdarza mi się bardzo rzadko.
Coś tu robię źle? Jakbym mógł to polepszyć zmieniając injection z field na constructor?