Unit testing

Měli jsme s Davidem akademickou rozepři...

Unit Testy

  • Testují funkcionalitu jedné logické části. K tomu je třeba určitá úroveň izolace pro odstínění dalších vrstvev/externích systémů
  • Tento koncept se často nazývá jako "Test Double"
  • Existuje více variant těchto testů, dle účelu/chování(není důležité jak objekt vznike).
  • Testujeme jednak chování tak stav

Dummy

  • Nejjednodušší
  • Něco co musíme v testu použít(vyžaduje to signatura), ale SUT s tím nebude interagovat
  • Umožní nám vyhnout se implementaci a přesto pustit test
  • null, prázdný objekt, nic nedělající Mock

Fake

  • Používá se pro zjednodušení závislostí, místo opravdového objektu se do SUT injectne fake.
  • Fake object je zde ale pouze pro potřeby volání metod(jinak by se  nám test nespustil)
  • Fake nijak neovlivňuje běh testu. Ani volané metody ani vracená data nemají na výsledek testu žádný vliv. Test jen potřebuje aby se vrátilo `true` nebo `success`
  • např. fake repository které při save/delete vrací OK

Stub

  • Něco co drží předem definovaná data, která poskytne SUT v průběhu testu.
  • Používáme když se chceme vyhnout volání další vrstvy/systému ale potřebujeme data pro další běh testu.
  • Dnes se pro jejich vytváření používají i frameworky jako Mockito.
    I když to porušuje některé definice. Hlavně se sním ale nesmí jako s Mockem pracovat

 

Mock

  • Stejně jako ostatní se používá jako injectnutý object do SUT s kterým interaguje
  • Hlavní rozdíl je že zaznamenává na sobě vykonávané operace během testu. (Pokud STUB vytvoříme mockem tak se v něm toto děje i když by nemělo)
  • V testu pak můžeme tyto akce, resp. jejich (ne)vykonání verifikovat

Spy

  • Object který je opět injectován do SUT a integraguje s ním
  • Nevytváří expektace, tedy používá reálné metody, ale současně zaznamenává jejijch volání a umožňuje tak jejich verifikace.
  • Také se dá použít v případě že potřebujete pro testy změnit 1(nebo více metod) na nějakém objektu, ale zbytek metod nechcete měnit/mockovat a chce použít jejich reálné verze

Testing

By Jiří Čížek

Testing

  • 82