Jak píšete testy rubrika: Programování: PHP

4 jednabedna
položil/-a 27.9.2013

Dávám tuhle otázku do sekce PHP, ale asi se to týká programování obecně. Můj případ je ale z PHP. Mám dotaz k testování jednotlivých featur, které děláte. Já popíšu jak to děláme u nás, co nám na tom nevyhovuje a třeba už naše problémy někdo řešil a úspěšně vyřešil.

Když píšu nějakou novou funkcionalitu, tak ji mám rozdělenou do několika tříd, nejnižší úroveň je databáze, nad ní jsou nějaké třídy kterým u nás říkáme persistence, které přes dibi vytahují data z databáze a na nejvyšší úrovni je třída, které u nás říkáme controller (protože používáme nette a máme presentery) a v ní je jedna public metoda přes kterou se celá ta funkcionalita ovládá. Každou třídu kromě persistence testujeme unit testy to není velký problém, protože jsou docela rychlé a není probém si je pustit a zjistit jestli procházejí.

Problém jsou testy persistencí a potom integrační testy celé featury. Nejprve k té persistenci: jsou to třídy, které obsahují malé metody, kde je dotaz do databáze a vrácení dat. Nemá smysl to testovat unit testem (pokud tvrdíte opak, pak bych rád viděl příklad té metody a takového testu). Všechny ty metody vypadají úplně stejně: query, fetch, return. Pokud jde o DML tak jen query.

Potom je integrační test celé té featury, máme nějakou testovací databázi, kterou si v setup fázi testu promažeme a naplníme testovacími daty. Problém je, že s přibývající funkcionalitou doba běhu těchto integračních testů (a testů persistencí) strašně narůstá. Vývojář nemá čas ani chuť si pustit testy a čekat dvacet minut až mu všechny doběhnou. Máme sice integrační server Jenkins, který testy spustí a problémy emailem oznámí vývojářům, ale to není o moc lepší. Když něco doprogramujete, vrhnete se na něco jiného a po půl hodině vám přijde email, že jste někde rozbili testy, tak je strašný opruz se vracet k předchozímu a opravovat to. Jak to řešíte u vás?

odkaz
Anonym
odpověděl/-a 27.9.2013

Většinu logiky máme nezávislou na DB a pokrytou unit testy a integračními testy, které dohromady neběží déle než minutu. Integrační testy persistenční části běží proti in-memory SQLight databázi, která je hodně rychlá. Nakonec máme baterii automatizovaných akceptačních testů, které běží už proti nadeployovanému systému. Ty běží zhruba čtvrt hodiny, ale dělají end-to-end scénáře vč. dotazů do externích zdrojů, testování cachování, paralelního zpracování, priorit a tak. To si žádá už nějaký čas. Ale většina funkcionality je otestována v rychlých testech. U těch akceptačních počítáme s tím, že nemusí vždy doběhnout v pořádku.

Pro zobrazení všech 7 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.