Wrzucam praktycznie wszędzie.
Robię final klasy. (Więc na metody nie muszę).
Męczące to, ale java ma dużo bardziej męczące miejsca.
(więc już raczej mało w javie piszę).
Interfejsów nie robię za często.
Mockito też nie stosuję prawie nigdy.
Noi kiedyś dokładnie tak robiono, interfejs, i dwie implementacje, jedna testowa, jedna produkcyjna. I zgadnij co. To było dużo niepotrzebnej pracy, bo zamiast dodatkowego interfejsu i klasy, można to opendzlować jednym when() z mockito. To są tylko testy. Poza tym czasem kod spodziewa się konkretnej implementacji jednego interfejsu - i co, potem zrobisz interfejs dziedziczący z interfejsu, żeby drugą implementacje otestować? 2/10.
Z ciekawostek - w jednej firmie w końcu dostaliszmy szału od Mockito, bo spokojnie można było pół kodu wywalić a testy były zielone. Co akurat jest spoko, tylko że tu system nie działał użytkownikom po tej operacji. Po wywaleniu mockito i przejściu na ręcznie robione testowe implementacje... ilość linii kodu w testach drastycznie spadła.
Jeśli to kogoś dziwi: mockito robione do przesady prowadzi szybko do setek powtarzających się sekwencji mockito.when - można przeoczyć, że to cały czas te prawie te same linijki.