Ako koncipovať testy rubrika: Programování: Jiné

7 harrison314
položil/-a 23.3.2016
 
upravil/-a 23.3.2016

Ako beriete filozofiu testovania, na co pisete testy a na co nie?

Konkretnejsie ma viacej zaujimaju unit a integracne testy. Ako koncipujete samotny test?
Pre jednu funcionllitu (metodu/funkciu) testujete v jednom teste iba jeden scenar (test vola metodu len raz), alebo v nom zahrniete viacej vstupnych hodnot, chybove stavy, nevalidne argumenty,... (test vola testovaciu metodu viackrat).
Proste ma zaujima ako pristupujete k vnutru testov.

(Pri odpovediach spomente aj jazyk, pretoze predpokladam, ze filozofia moze byt ina v zavislosti od paradigmy a typovosti.)

odkaz
4 jednabedna
odpověděl/-a 23.3.2016

Nedávno jsem v jedné knížce četl o testovací pyramidě a docela se mi to líbilo. Autor píše, že máš psát tři druhy testů: unit testy, integrační testy a testy celého systému (neboli ui testů). Počet testů by měl klesat řádově jak se posouváš v pyramidě. Tedy například tisíce unit testů, stovky integračních testů a desítky testů celého systému. Ale může to být víc, nebo míň podle toho jak velkou aplikaci píšeš.

Na úrovni unit testů se testují veškeré validní, nevalidní a divné vstupy a testuje se veškerá logika. A testovaná metoda se volá několikrát.

Na vyšší úrovni už se nemusí testovat veškeré divné vstupy, protože to už bylo jednou otestováno. Testuje se jestli se služba chová v pořádku jako celek, pokud je na vstupu nevalidní hodnota jestli ji služba řádně odmítne a naopak pokud je hodnota správná, jestli se služba zachová tak jak se od ní očekává.

No a potom nejvyšší úroveň je úplně celý systém, několik služeb dohromady, frontend i backend. V případě webu se to většinou provádí seleniem. Zde se už nemusí testovat to co bylo jednou otestováno, jen se testuje, že se systém chová jako celek v pořádku a nic se nerozbilo při integrování jendolivých částí dohromady.

Komentáře

  • harrison314 : Ja som skor myslel, ako to prebieha na urovni jedneho testu. Ci vramci neho sa testuju viacere hodnoty. 23.3.2016
  • jednabedna : No teoreticky se říká, že jeden test = jeden assert. Málokdo to ale dodržuje. Má so svoje výhody, ale je s tím víc psaní. Nicméně ale vždycky by ale mělo platit, že jeden test = jeden koncept. Tedy jednou zavolat testovanou metodu, jednou jí předat testovaná data a ověřit návratovou hodnotu. Nikdy bys neměl v jednom testu volat testovaný kód vícekrát. 23.3.2016
  • dzejkob : Proboha a proč ne? V jednom testu do tý metody nasypu sakra hodně kombinací a ověřím dost návratových hodnot. Klidně tam i přisypu nějaký randomtesting. Souhlasil bych, že by se měla testovat jenom jedna část s dostatečně malou odpovědností - ale pak mě zajímá jenom, zda ta část funguje / nefunguje. Kolik toho je v testu je mi jedno. 24.3.2016
  • dominios : podla mna je najlepsie pisat 1 test pre uspesne chovanie a netahat tam vsetky mozne kombinacie a rozne ich handlovat.. 1 test pre success (samozrejme kludne s vacsim polom roznych moznosti argumentov), 1 test na otestovanie ci metoda napr. spravne vyhadzuje vynimku, dalsi test na akekolvek zvlastne chovanie... radsej viacero testov na 1 metodu ale logicky pomenovanych/usporiadanych, ako 1 velka test metoda ktora testuje vsetko a clovek sa v tom nevyzna 24.3.2016
  • Kit : Vždy záleží na potřebné granularitě výstupu testu. V jednom testu může být i více assertů, pokud to nesnižuje srozumitelnost výstupu. Snad se shodneme na tom, že by se v jednom testu nemělo testovat více funkcionalit, ale jen jedna. 24.3.2016
  • skliblatik : Zrovna si "užívám" s testy, kde jeden test testuje spoustu věcí a kód na konci testu závisí na tom, co proběhlo na začátku. Ke všemu to není úplně rychlé... Jedna aserce na test je trochu moc přísná, ale obecně jsem pro to, aby test byl pokud možno co nejjednodušší a nejspecifičtější (pravda - ale ne jednodušší a specifičtější než možno :) 24.3.2016
  • harrison314 : jeden asert je an mna prilis prisne, skor by som to rozdelil tak, ze testovat osobntne chybove stavy a validne stavy 25.3.2016
  • arron : Jeden assert se myslí, ačkoliv se to nikde možná moc nepíše, jeden "custom assert" čili jedna assert metoda, která je připravená pro otestování jednoho stavu. Tahle assert metoda pak obsahuje více volání assert* metod tak, aby se dostatečně otestoval daný stav a při selhání se doručila srozumitelná informace, co přesně selhalo. Jinak jeden scénář (funkcionalita chcete-li) jedna testovací metoda. Pokud je potřeba otestovat více vstupů v jednom scénáři, tak se používá @dataProvider (phpunit), který způsobí více volání testovací metody s různými sadami parametrů. 26.3.2016
  • Kit : @arron: Pod pojmem "assert" si představuji klíčové slovo "assert", které je ve většině moderních jazyků a které používám pro psaní testů. 26.3.2016
  • arron : @Kit: A co jiného by sis pod tím chtěl taky představit? :-D Ale je rozdíl, jestli napíšeš to testovací metody několik assertEquals nebo si vytvoříš metodu assertArticlePublished a všechny ty assertEquals přesuneš do ní. 26.3.2016
  • Kit : @arron: Jak souvisí assert s assertEquals? To první je klíčové slovo jazyka, to druhé je název nějaké metody nějakého frameworku. 26.3.2016
  • Honza Břešťan : Ja tady assert vnimam jako ten logicky Assert z Arrange-Act-Assert patternu. Jestli je to klicove slovo, funkce frameworku a nebo moje vlastni je totalne egal, hlavni je v jedne fazi overit vystup/chovani toho testovaneho kusu kodu a tim skoncit jeden test. 26.3.2016
  • arron : @Kit: Slovo "assert" nebo také počeštěné "asserce" (assertion) se i v literatuře používá ve smyslu vyhodnocení nějakého cílového stavu na konci testu. V překladu assert = prohlašovat/tvrdit nebo také 'dožadovat se', čili v testu se jedná o prohlášení, že něco platí, případně o prohlášení/tvrzení, že je něco rovno nečemu jinému (to je to zmíněné asserEquals z phpunitu, ale nejenom z něho). Takže to má různé přenesené významy. A klíčové slovo jak kde, třeba v php nikoliv :-) 27.3.2016
  • Kit : "PHP 7.0.0 assert() is now a language construct and not a function." 27.3.2016
  • arron : @Kit: To je možné, ale stále to není klíčové slovo http://php.net/manual/en/reserved.keywords.php ;-) 27.3.2016

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.