"Mutasd meg, hogyan teszteled a kodot arra az esetre, ha az MNB szervize eppen valami miatt nem elerheto."
Megmutattam, a teszt nem használja egyáltalán az MNB service-t. Ha nem elérhető, akkor is ugyanúgy fut.
Te is mutathatnál végre valamit.
Ha direktbe hívod a service-t, pl.:
double calcTotalPrice(Products products) {
double sum = 0.0;
for (Products product : products) {
sum += MNBExchangeService.exchange(product.price);
}
return sum;
}
akkor ezt hogyan teszteled stub-bal pl. 4 product-ra?
"Kulonben meg a TestExchangeService egy stub, csak ki van irva, hogy class. ..."
Nem egészen. Ha megváltozik az implementáció egy teljesen szabályos refaktorálás miatt, akkor nem kell átírni, míg egy Stub-nál át kell, követni kell az implementációt.
Pl., ha a fenti erre változik:
double calcTotalPrice(Products products) {
return MNBExchangeService.exchange(products.calcTotalPrice());
}
A tesztelés célpontja félremegy. Nem azt teszteled, hogy adott inputra adott outputot ad-e, hanem azt, hogy az implementáció lépései egymás után a kívántaknak megfelelően hívódnak-e meg.
Ha változik az API, akkor fordításkor jelez, és kényszerít, hogy implementáld. A Stub-nál nem jelez, nem kényszerít, esetlegesen hibásan fognak futni a tesztek: hibát jelez (ráadásul teljesen máshol), ha nincs is hiba, vagy nem jelez hibát, holott van hiba.