Kiedy używać Mockito?

Kiedy używać Mockito?
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
2

Pewnie pisałem już to, ale powtórzę.
Dlaczego nie kocham Mockito
a) bo wcale wiele nie daje - bez mockito jestem w stanie zrobić mocki w mniej więcej tyle samo linijek kodu (chociaż niektórzy będą twierdzić, że nieprawda - patrza punkt 2), jesli niewiele daje to po co zaśmiecać kod kolejnym narzędziem
b) Mockito oczywiście wiele daje jeśli korzystamy z mockito.verify, wtedy żeby odtworzyć tąką funkcjonalność trzeba by się namęczyć, ale akurat uważam testowanie verify za antywzorzec.
Co mnie obchodzi czy funkcja w środku wywołała repozytorium, jesli dała dobry wynik? Jak ktoś napisze funckcę zwracającą poprawne raporty z bazy bez odnoszenia się do tej bazy to super, mi pasuje.
Nienawidze betonowania implementacji jaka zachodzi przy używaniu verify (i ogólnie london tdd) .Są wyjątki- typowym wyjątkiem jest funkcja sendMail - fire and forget, chociaż na upartego można postawić serwer pocztowy i sprawdzać czy przysżło w teście...
c) może problem wynika też z tego ,że ludzie uważaja za obowiązek zamockowania w tzw. unit teście wszystkiego co nie jest w unicie. Ja nie widzę w tym podejściu żadnego sensu. I problemu nie mam, bo nie piszę unit testów - piszę po prostu testy.
d) Jak się rozrośnie popularność Mockito w projekcie to łatwo przeoczyć, że pewne testy zaczynają testować li tylko Mockito. Oczywiście prawdziwi, porządni i uważni programiści tego nie robią.
Ale puty takich programistów nie ma i trzeba się męczyć z ludźmi to niestety jest problem. Oczywiście można wprowadzać kolejne narzędzia - typu testy mutacyjne do łapania tego... tylko nie wiem czy to nie jest równia pochyła (nigdy nie wprowadziłem testów mutacyjnych dalej niż jako krótki i męczący eksperyment). Na review takie rzeczy nie wychodzą. Po prostu nie. Ileś razy gapiłem się w test i zastanawiałem się czy on w ogóle coś testuje (i w końcu musiałem sprawdzić) - długo to trwa. Tu na forum ileś razy ludzie takie kwiatki jako testy podesłali.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 5x, ostatnio: jarekr000000
TS
Muszę sprawdzić czy moje settery faktycznie coś setują.
99xmarcin
Ja jeszcze dodam wszędobylską plagę any() w setup'ach mocków. W niektórych projektach 100% parametrów w stubach jest po prostu olewanych.
vpiotr
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
2

Mockito / moków ogólnie używasz jak masz zewnętrzną zależność nad którą nie panujesz (np. sendMail).
Coś co jest współdzielone lub nie masz możliwości przywrócenia stanu tego czegoś do stanu inicjalnego sprzed testu.
Czasem udaje się zrobić testy działające na swoim podzakresie danych w bazie współdzielonej, ale to ryzykowne zagranie.
Lepsza jest baza lokalna, a najlepsza in-memory.

Potat0x
  • Rejestracja:prawie 9 lat
  • Ostatnio:21 dni
  • Postów:370
2

Kilka miesięcy temu pod wpływem nienawiści do Mockito (mockowane repozytoria, nie polecam...) napisałem to: https://github.com/Potat0x/nomock Sam nie miałem okazji tego użyć i nie wiem czy w praktyce komuś się przyda ten wynalazek, ale zostawiam ;)

Julian_
Jaka licencja?
Potat0x
Dodałem licencję MIT
Julian_
fajne, czy nie powinieneś dodać synchronized do zapisywania?
Potat0x
Czemu nie :) W weekend popatrzę na spokojnie.
ME
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:638
0

A nie lepiej w ogóle nie pisać testów? Myślę, że to was pogodzi. Wszyscy będą zadowoleni.

KA
a jeszcze lepiej nie pisac kodu w ogole
mad_penguin
mad_penguin
ale jesteś inteligentny
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
2

@Meini ma ogólnie rację, gdyby to był jakiś nowoczesny język...

Ale pytanie dotyczyło javy.

https://www.hacklewayne.com/types-and-tests-javascript-10-idris-0

Testing is a poor substitute for proof.
https://bartoszmilewski.com/2014/11/24/types-and-functions/


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 4x, ostatnio: jarekr000000
nowyworek
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:świat
  • Postów:174
0

Ja używam mockito, żeby mi komary do domu nie wlatywały


Julian
UM
  • Rejestracja:około 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:12
0

Polecam super artykuł jak zrobić testy integracyjne z Mockito:
https://reflectoring.io/spring-boot-web-controller-test/

An integration test with Spring fires up a Spring application context that contains all the beans we need.

xd

edytowany 3x, ostatnio: U_mnie_działa
nowyworek
zaś ty
UM
@jarekr000000: narzekał że cola i popcorn mu został to robię co mogę
UM
  • Rejestracja:około 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:12
2

Najpierw piszemy spagetti kod, czym bardzie skomplikowany i z większą ilością zależności tym lepiej.

Musisz kod napisać tak żeby nie dało się napisać normalnego unit testu. Pamiętaj normalne unit testy są dla juniorów, a Ty chyba nie chcesz być juniorem?

Musi wyglądać skomplikowanie nie piszemy przecież banałów. Jak już masz spagetti kod to mockujesz 200 zależności i wtedy jesteś seniorem

edytowany 3x, ostatnio: U_mnie_działa
Shalom
E tam, najwyżej midem. Senior to dopiero jak wciagasz powermock i lecisz z mockStatic, suppress static initialization, expectPrivate i mój faworyt createNicePartialMockForAllMethodsExcept... :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.