Řada z vás možná už na výraz Mock testing narazila,
někteří ne. Pro ty z vás, kteří Mock přístup v
testování nepoužili je tento článek. Pro ostatní může
být zajímavá ukázka této techniky na knihovně
EasyMock.

Co jsou to mock objekty?

Jedná se vlastně o techniku psaní určitého druhu
automatických testů. V podstatě se jedná o nahrazení
reálného objektu testovací fasádou, která neprovádí
žádnou funkcionalitu nahrazovaného objektu – jen se
jako tento objekt tváří. Místo původní logiky objektu
je vloženo chování, které ve svém testu potřebujete.

Nejlepší bude teorii provázat s praxí. Pokud píšete
automatické testy, jistě jste narazili na situaci,
kdy k napsání jednoduchého testu musíte velmi složitě
a pracně připravovat okolní podmínky. Např. testujete
metodu v business objektu, který se dotazuje interně
DAO objektů na data v databázi. To ale znamená, že
před tím, než začnete testovat logiku tohoto business
objektu, musíte připravit správná data v databázi.
Musíte také zajistit, že se tam omylem nedostanou
další data, která by test zhatila (např. v SELECT
dotazu vrátila více řádků) a tudíž obvykle zase
musíte po sobě uklízet. Ošetření okolních podmínek
spuštění testu vás nakonec může stát několkrát více
času, než potřebujete k napsaní vlastní testovací
logiky.


Existují různé techniky, jak toto zajistit – setkal
jsem se např. s použitím HSQL databáze, která byla
celá v paměti a po každém testu se kompletně dropla a
před novým opět vytvořila a dosadila se příslušná
testovací data (tím, že se vše odehrávalo pouze v
paměti byly testy velmi rychlé). Ovšem lehčí je dle
mého názoru právě použít techniku mock objektů.

Při použití této techniky se soustředíte na
testování pouze logiky business objektu a
předpokládáte že okolní objekty fungují správně tak
jak mají. Potom v našem příkladě za DAO objekty
dosadíte pouze “prázdné” ulity, které mají stejné
rozhraní, ale místo vlastní logiky obsahují logiku
takovou, kterou potřebujete pro vlastní test. Tzn. ve
chvíli, kdy se business objekt zeptá DAO na konkrétní
data, neproběhne dotaz do databáze, ale vy mu rovnou
vrátíte data, která v daném testu potřebujete.

Pokud se chcete dozvědět něco víc, pokračujte ve
čtení.