Obsah
Agilní metody vývoje software jsou hitem současnosti. Mezi nejznámější z nich patří Extrémní programování (XP) a Programování řízené testy (TDD). Mezi základní praktiky těchto metod vývoje software patří tzv. jednotkové testování. Jednotkovým testováním ověřujeme funkcionalitu specifických částí zdrojového kódu.
Předpokladem kvalitního a úspěšného jednotkového testu je zaměření se na testování jedné jediné věci izolovaně od zbylých částí zdrojového kódu. Musíme přesně vědět, co testujeme a kde mohou vzniknout potenciální problémy. Tohoto předpokladu je však těžké dosáhnout u většiny netriviálního kódu. Je těžké vyvarovat se psaní komplexních, nekompletních a těžko udržovatelných jednotkových testů, které mají navíc tu výhodu, že dokumentují zdrojový kód.
V následujícím textu se seznámíme s jedním druhem jednotkového testování, který má vliv jak na kvalitu jednotkového testu, tak na testovaný kód samotný. Budeme mluvit o interakčním jednotkovém testování.
Základním předpokladem kvalitního jednotkového testu je maximální se soustředění na testovaný kód a omezení jeho závislostí na ostatním doménovém kódu. Od interakčních jednotkových testů dále vyžadujeme, abychom byli o vzniklých chybách informováni v okamžiku jejich vzniku a ne až na konci testu samotného, jak je běžné u klasických jednotkových testů. Tyto nedostatečnosti běžného jednotkového testování se snaží řešit technika zvaná mockování objektů, jež je základem interakčního jednotkového testování.
V této technice nahrazujeme doménový kód jeho modelovými implementacemi, tzv. mock objekty. Tyto objekty propojujeme s testovaným kódem, a tak tento kód testujeme tzv. zevnitř (Endo-Testing). Nahrazením doménového kódu mock objekty je zaručena izolovanost testu vůči ostatnímu kódu. Mužeme říci, že mock objekty jsou modelovými implementacemi doménových tříd v minimálním stavu nutném pro testování objektu.
Používáním techniky mockování objektů zajišťujeme nejen izolovanost testovaného kódu a testování objektů na jemnější úrovni granularity než je obvyklé, ale také podporujeme lepší strukturovanost produkčního kódu i testů.
Interakční jednotkové testování předem definuje strukturu jednotkového testu, což dává vývojovému týmu společný jazyk, který zaručuje, že testy budou psány čitelně, srozumitelně a jednotným způsobem.
Ptáte se, jaký je rozdíl mezi mock objektem a pahýlem (stub) používaném při klasickém jednotkovém testování? Rozdíl mezi mock objektem a pahýlem je dán jejich použitím. Pokud používáme mock objekty, mluvíme o interakčním jednotkovém testovaní. Klasické jednotkové testování pomocí pahýlů je stavové jednotkové testování. My se nadále budeme zabývat pouze interakčním testováním pomocí techniky mockování objektů.
V následujícím textu si řekneme, proč používáme mock objekty při psaní jednotkových testů. Ukážeme si výhody používání mock objektů v jednotkových testech a jaký mají vliv na architekturu celé aplikace.