úterý 13. července 2004

Stavové a interakční testování

Když jsem dnes ráno pročítal TSS narazil jsem na diskusi k článku Mocks Aren't Stubs od Martina Fowlera, kterého považuji za, průkopníka a inovátora technik vývoje softwaru.

Při psaní unit testů potřebujete po otestovaní objektu (primární objekt) i další sekundární objekty, které primární objekt využívá. Tyto sekundární objekty můžeme mockovat nebo stubovat. Mock nebo Stub objekt pak představuje sekundární objekt v minimálním stavu nutném pro test primárního objektu.

Z mého pohledu představoval Mock to samé co Stub, s nepatrným rozdílem, že Mock objekty implementovaly rozhraní sekundárního objektu. Článek Martina Fowlera mě vyvedl z omylu. Myšlenka Mock objektů, které vycházejí z XP (Extrémní programování) sahá do způsobu testování.

Mock objekty jsou určeny k interakčnímu testování, tedy interakce mezi primárním a sekundárním objektem na základě nějakého očekávání. Hojně používaný způsob testování se nazývá stavový asi většina testů, které jste viděli, byla stavová. Stavové testování se odlišuje v tom, že se testuje výsledný očekávaný stav objektu např. hodnota x je 50.

V článku je popsáno jak interakční tak stavové testování, jejich rozdíly a autorův pohled na oba přístupy. Samozřejmě nechybí ani vysvětlení toho co představuje Stub a Mock.