( enpassant | 2015. 11. 23., h – 11:13 )

"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.