Netestuji procesor, ale funkci.
Takže netestujete funkčnost, ale potenciální chyby.
Pro funkci součtu stačí do testu zařadit okrajové podmínky, kdy ta funkce musí fungovat správně. Pokud funkce suma(100, 200) vrátí místo 300 hodnotu 44, tak je jasné, že se pro můj účel nehodí, i když pro jiné použití ten výsledek 44 může být správně.
Jenže ta funkce vám klidně pro
suma(100, 200) může vrátit 300, ale pro
suma(200, 100) vám vrátí 44. I když bude procesor v pořádku. Bez pohledu do zdrojáků to nepoznáte, a z vašeho testu
assert suma(100, 200) == 300 to také nepoznáte. Protože netestujete funkčnost, ale jenom potenciální chyby – a s chybou, která bude pro vstup
200, 100 vracet špatný výsledek, jste nepočítal.
A přesně tyhle „hm, to by mne nenapadlo, že tam může být
takováhle chyba“ se pak projevují jako chyba programu u koncového uživatele. Když se o ní programátor dozví, někdy už ze samotného výskytu chyby pozná, v čem je problém, ale ty záludnější chyby jsou záludné právě v tom, že jejich příčina není na první pohled vidět. A právě procesu hledání takových chyb se říká debugování. Přičemž testy vám v tom moc nepomůžou – můžete si napsat integrační test na celek, který vám bude padat, ale z toho stejně nezjistíte, proč padá. Abyste mohl napsat jednotkový test na tu konkrétní chybnou funkci, musíte nejprve zjistit, v čem přesně chyba spočívá.