Mock ja Stub
13.02.2007 | MarekKui me soovime teada saada, kuidas inimesed sõltuvad ilmast, siis peaksime vaatlema inimesi aastaringselt. See on küllaltki pikk aeg. Palju parem oleks, kui saaksime ilma ise kontrollida ja viia vastavad vaatlused läbi. See võtaks võib-olla ainult kuu aega.
Sama lugu on ka tarkvaraarenduses. Objektid sõltuvad teistest objektidest ning nende testimisega võib olla probleeme:
- vastavaid sõltuvusi pole veel loodud (objekte),
- testandmete olemasolukontroll ja ülesseadmine,
- ajakulukad protsessid.
Selle koha peal tulevad appi mock ja stub objektid. Need peaksid aitama testida objekti isolatsioonis, s.t. kontrollida ainult ühte objekti käitumist.
Stub
Neid objekte tuleks kasutada siis, kui ei ole vaja teada, mitu korda selle objekti poole pöörduti, mis argument talle ette anti ning ei soovita teada saada, kas selle objekti poole üldse pöörduti.
{
public bool isValid()
{
return true;
}
}
Sellegi poolest tasub kasutada mock'ide raamistikke, sest siis ei pea neid klasse ise defineerima. Selle sama võib kirjutada testmeetodis kasutades TypeMock.NET'i:
validatorMock.AlwaysReturn("isValid", true);
Mock
Mock'id on võimelised teada andma, mitu korda mingit meetodi kutsuti. Peale selle saame seadistada küllaltki lihtsalt, et mis argumentide korral milliseid vastuseid tagastatakse.
Stub'idega sama asja tegemine võtaks liigselt aega ning ei pruugi pakkuda kõike vajalikku.
Mock'ide abiga on võimalik küllaltki hästi lahti saada andmebaasi vajalikkusest testis. Igakordne testandmete lisamine andmebaasi ja nende kustutamine võtab liigselt aega ning vigu võib tekkida ka andmebaasiga.
Mock'ide toetus
Java platvormil on EasyMock, JMock.
.NET platvormil on TypeMock.NET ja NMock.
Viited
Improving the Testability of Legacy Code using TypeMock.NET
Mocks Aren't Stubs
Mock Objects to the Rescue!
Mock Objects
