Pojmy, školy a kroky

Stručný prehľad pojmov, škôl a krokov ATDD/TDD na rýchle nahliadnutie.

Chicago vs London school

PojemVysvetlenie
Chicago schoolUnit je modul (jedna alebo viac tried), testuje sa cez jeho rozhranie a overuje sa výsledný stav. Mockuje sa minimálne, len zdieľané závislosti (DB, súbory, sieť) – refaktoring je vďaka tomu jednoduchý.
London schoolUnit je trieda, testuje sa v úplnej izolácii a overuje sa interakcia so spolupracovníkmi. Mockujú sa všetky závislosti – štrukturálna zmena preto ľahšie rozbije testy.

Kľúčové pojmy

PojemVysvetlenie
UnitNie je to metóda ani trieda, ale modul (jedna trieda alebo fasáda nad viacerými triedami), ktorý reprezentuje kus správania systému.
MockTestovací dvojník, ktorý simuluje správanie objektu a zároveň overuje, že naň prišlo očakávané volanie (interakcia).
Stub„Hlúpy“ testovací dvojník bez logiky, ktorý vždy vráti rovnakú, vopred pripravenú odpoveď.
Fake„Šikovnejší“ testovací dvojník s malou zjednodušenou logikou – napr. in-memory implementácia repozitára namiesto reálnej DB.
Test double (Testovací dvojník)Súhrnné označenie pre mock, stub, fake a spy – náhrada za skutočnú závislosť použitá v teste.
Given/When/ThenŠtruktúra scenára: Given = počiatočný stav, When = akcia, ktorú testuješ, Then = očakávaný, pozorovateľný výsledok.
Akceptačné kritériumPodmienka, ktorú musí funkcionalita spĺňať, aby ju mohol používateľ alebo zákazník akceptovať ako hotovú.
ScenárKonkrétny opísaný prípad použitia (Given/When/Then), ktorý sa dá premeniť na test.
Spustiteľná špecifikáciaTest napísaný tak, že zároveň slúži ako čitateľný zápis požiadavky – keď prejde, požiadavka je splnená.
Outside-InPrístup k návrhu, pri ktorom začínaš od vonkajšieho správania systému (UI, API) a implementáciu dopĺňaš smerom dovnútra, podľa toho, čo ti chýba na to, aby prešiel akceptačný test.

5 krokov Canon TDD

PojemVysvetlenie
Test ListSpíš zoznam očakávaných variantov správania – čisto behaviorálna analýza, žiadne implementačné rozhodnutia.
Write a TestNapíšeš jeden skutočný automatizovaný test so setupom, vyvolaním a asertáciami.
Make it PassUpravíš systém tak, aby test reálne prešiel – bez mazania asertácií alebo kopírovania vypočítaných hodnôt ako očakávaných.
Optionally RefactorVylepšíš implementáciu bez zmeny správania – len v rozsahu potrebnom teraz, duplikácia je náznak, nie príkaz na abstrakciu.
OpakujKým zoznam testov nie je prázdny, vráť sa na krok Write a Test.

Testovacia pyramída

PojemVysvetlenie
Akceptačné testyTestujú správanie aplikácie ako black-box z pohľadu jej konzumenta (užívateľ UI, iný systém cez API).
Integračné testyOverujú súčinnosť s reálnymi externými službami. Napríklad že aplikácia vie reálne odoslať potvrdzujúci email cez Brevo API.
Unit testyNajrýchlejšie a najpočetnejšie testy, testujúce správanie jednotlivých modulov.

3 typy unit testov

PojemVysvetlenie
Návratová hodnota alebo výnimkaTest overuje, čo funkcia/metóda vráti alebo akú výnimku vyhodí.
Zmena vnútorného stavuTest overuje, že sa po akcii zmenil stav modulu.
Interakcia s externou komponentouTest overuje, že modul správne zavolal svojho spolupracovníka (napr. cez test double na hranici modulu).