Kb. bárhova válaszolhatnék, szerintem - ide teszem. Két dolog, nagyvonalakban.
Egy:
Tegyük fel, van egy RESTlike API-m, amin felhasználók regisztrálhatnak. Feltétel, hogy a felhasználók 18+ évesek legyenek, s ezt a backend oldalon is szeretném ellenőrizni. Ha ez megvan, akkor hívok egy
dao.save(user);-t. Ha nincs 18 éves, akkor exceptiont dobok, amit feljebb lekezelünk. A 18 éves-ellenőrzés egy másik interfészből jön, amit tesztelhetünk úgy is, ahogy neked szimpi, tesztelhetünk úgy is, ahogy nekem.
Ezt mockolva gyönyörűen tudom verify-olni, hogy tényleg elmentettük, ha el kell. Te milyen, egyszerű implementációt írnál erre, s hogyan ellenőriznéd?
Kettő:
Még mindig nem sikerült rendesen megindokolnod, hogy ez miben más, mint a mockolás.
Tulajdonképpen olyan implementációkat írsz, amik előre meghatározott bemenetekre, előre meghatározott választ adnak. Annyi a különbség eközött, meg a mockolás között, hogy:
* a mockokat tényleg tesztenként tudom másképp, másképp megírni
* a mockok sokkal, de sokkal kevesebb kódot jelentenek
* és, ami szerintem a legfontosabb, hogy az egyes unit tesztek teljesen függetlenek lesznek egymástól.
A te példádon még mindig azt látom, hogy:
* vagy külön-külön teszt implementációt írsz néhány (1-5) tesztenként
* vagy egy idő után olyan szinten összetett lesz a tesz implementációd, hogy képtelenség karbantartani.
És ezek mellett a teszt-kódtól messze van.
Ezek alapján az OP-ben említett érvek:
* modulárisabb: miért is? Az interfész.definícióm megvan, nem? Akkor miért kevésbé moduláris, ha mockot gyártok rá, mintha plusz egy implementációt?
* jobban újrafelhasználható: ez ugyanaz, mint az előző.
* egyszerűbb: lásd alább, a kevesebb kódnál.
* kevesebb kód: ez biztosan nem igaz, mert amíg mockkal két sorban megoldod egy metódos egyszerű implementálását (adott válaszra adott bemenet, mert te is csak ennyit csinálsz fent), addig a te módszereddel ez sokkal-sokkal több.
* kevesebb változó rész: miért is?
* Mock eltűnik: ez nem tudom, miért előny. (pont ennek az előnyeiről, hátrányairól vitázunk)
* Stub eltűnik: ez nem tudom, miért előny. (pont ennek az előnyeiről, hátrányairól vitázunk)
--
blogom