Mock ja Stub

13.02.2007  |  Marek

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

class ValidatorStub
{
    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:

Mock validatorMock = MockManager.Mock(typeof(Validator));
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

Kommenteeri

sulge
Saada link e-postiga

© DT 2012 | Creative Commons Attribution-Noncommercial 3.0 License | WordPress