Csak kettőt kell karbantartani, a "normal"-t és a tesztet. A Stub-ok karbantartása és készítése se kevesebb munka.
"a coverage egy budos nulla lesz rajta"
Miért lenne 0? Hiszen eleve a tesztekben szerepel.
"a teszt-ben levo AuthService-t a kutya nem fogja letesztelni semmire, hiszen a mocking ugyebar rossz"
Ez egy szeparált modul, nagyon egyszerűen tesztelhető mocking nélkül.
"Egy stub annyibol jobb ennel, hogy a teszt elejen (anelkul hogy teljes mertekben implementalnod kellene az adott service-t) elore megmondhatod, hogy a teszt szempontjabol miknek kell tortennie."
Ez az amikor az implementáció mikéntjét teszteled.
Példa: Tfh. van egy CalcService modulod, amiben van egy funkció, ami két számot összead és logolja (adatbázisba)
int add(int a, int b)
A kódodban, amit szeretnél tesztelni van egy függvény, ami kiszámolja három szám összegét úgy, hogy használja a CalcSevice-t.
int add3(int a, int b, int c)
Pszeudó implementáció (a+b)+c:
int add3(int a, int b, int c) {
  int ab = CalcService.add(a, b)
  return CalcService.add(ab, c)
Hogyan teszteled ezt Stub-bal?
Szeretnéd ellenőrizni, hogy (2,3,5) paraméterekre 10-et ad-e. Felkonfigurálod a Stub-odat, hogy (2,3) paraméter esetén 5-öt adjon vissza, (5,5)-re meg 10-et.
Ha az implementáció megváltozik a+(b+c)-re, vagy (a+c)+b-re, akkor hibát fog jelezni a teszt.
Ha elrontják az implementációt pl. 2*(a+b)-re, akkor viszont azt mondja a teszt, hogy minden jó.
Illetve mi van akkor, ha nem egy inputra, hanem program által generált akár több száz inputra tesztelném? Ezt Stub-bal nem tudom megtenni.
"A masik nagy hiba, hogy o osszemossa az unit test layert es az integration test layert."
Nem Ő mossa össze, hanem jól tervezett rendszernél ez összemosódik, ami jó.
Lásd a fenti példámat, ha a CalcService-t úgy alakítják ki, hogy az add funkciója pure function, akkor nem kell szeparálni. Például, ha nem logol, hanem kiszámolja az összeget és visszaadja a logolandó információkat, akkor az pure function lesz és nem lesz neki mellékhatása, így nem kell szeparálni. Az add3 tesztelésénél maradhat a hívása, és tetszőleges sok inputra tudom tesztelni az outputot.
Pair<int, LogOut> add(int a, int b)