Seznamování s Nette Testerem
- kleinpetr
- Člen | 480
Ahoj,
vím, že se to tu párkrát řešilo, ale i tak se zeptám znovu. Mám konečně chuť začít testovat, ale zkrátka nevím čím začít. Zatím jediné co mě zaujalo je testovaní DOMu, což je fajn, ale jak například testovat nějaký proccessForm(), který je v presenteru a např. registruje uživatele, apod. Přeci když si tu funkci napíšu v testu, tak už to není test. Další věc je ta, že asi větší část aplikaci pracuje s databází, vím že se to tu řešilo pomocí mocků, atp, mě napadlo třeba v testu zapnout transakci a projet test a ve finále jí rollbacknout, ale nevím jestli je to úplně šťastné řešení.
Doufal jsem, že v nette testeru, jelikož má config stejný jako aplikace, si budu moct předávat zavíslosti přes DI, stejně jako v aplikaci, např. v konstruktoru, ale končí chybou.
Mám například nějaký StepForm, ale zaboha nevím jak nasimulovat test, který by vypadal stejně, jako když si jdu formulář proklikat do prohlížeče a je vůbec možné simulovat takovou situaci ?
Díky za rady a případné připomínky :)
- jiri.pudil
- Nette Blogger | 1029
Chtěl jsem ti tu něco napsat, ale pak jsem si řekl, že se vlastně vůbec nemusím namáhat, když už to všechno řekl @FilipProcházka :) https://www.youtube.com/watch?…
- Jiří Nápravník
- Člen | 710
Doporucuji mrknout na codeception, ja tam teda zatim delam jen akceptacni testy, coz v podstate skript naklikava to co bych klikal ja rucne, ale muzes tam mit samo i integracni a unit testy. A pracuje se s tim celkem pohodlne
- jiri.pudil
- Nette Blogger | 1029
Tím se ale nemusíš hned zahltit ;) doporučoval bych se zatím nezabývat těmi vyššími úrovněmi a začít odspodu, od unit testů: poctivě mockovat všechny závislosti a testovat doménové třídy (model), že na správné vstupy vracejí správné výsledky a na nesprávné vstupy reagují očekávaným způsobem. Tady je vstupní bariéra poměrně nízká a zároveň si to tím osaháš, zjistíš, kde jsou limity tohohle přístupu a pomalu začneš psát i integrační testy, kde některé mocky nahradíš reálnými objekty a budeš testovat větší celky. A až tohle pojmeš, můžeš k tomu přilepit „skutečnou“ databázi a další věci.
Akceptační/selenium testy si při tom můžeš vyzkoušet taky, protože testují věci z trošku jiného pohledu a ten přístup je jiný; místo kódu a výstupu funkčních jednotek testuješ výstup pro uživatele. Akorát tam už musíš mít zprovozněnou nějakou testovací databázi…
- kleinpetr
- Člen | 480
Jojo, díky :) určitě bych chtěl začít pozvolna a když jsem už jsem si říkal jo začínám to chápat tak koukám a všude se řeší „a ještě travis, a ještě selenium, a ještě tohle a tamto“ takže to momentálně vypouštím a jdu hezky pomalu, co jsem pochopil tak unit testy testují spíše funkce nebo metody, které nějakým způsobem zpracovávají nějaká data a následně asertuji správný nebo špatný výstup, k tomu asi není co dodat, jen že takových funkcí zrovna moc nemám, jediné co k tomu bych rád věděl je to předávání závislotí, dejme tomu, že mám nějakou classu, která má metodu co upravuje nějaký vstup, jenže samozřejmě ta classa přebírá již nějaké závislosti, proto když si v testu vytvořím instanci pomocí new SomeObject(..) tak mu je musím předat ručně, proto jsem doufal, že si do testu mohu taktéž předat závislost např. v konstruktoru, ale to mi neprošlo.
Co jsem pochopil a čím začnu, tak je testování DOMu, jelikož to dává asi největší smysl co se týče reálné aplikace a toho, že se opravdu něco dozvím.
Mám na projektu nějaké hotové řešení a snažím se zjistit jak na to napsat test, ale zkrátka mi asi nedochází jakým způsobem toho docílit. Zkusím dát stručný příklad.
Třída Offer, která v sobě udržuje nějaké položky typu ActiveRow a
má metody getItems() addItems() atp
Třída Order, která příjímá vytvořenou Offer a dále má metody jako
třeba proceedOrder() kde se zpracují položky, uloží do databáze,
kontaktuje další službu, v mém případě fakturoid a odešle maily,
samozřejmě v tom celém je nějaká session a další komponenty, takže
třída Offer zároveň ví o tříde Order a také s ní může eventuelně
manipulovat nebo zjišťovat stav apod.
a třeba u tohohle případu si říkám, že udělat takový test asi nebude jen tak a zabere to dost času. Takže asi opravdu začnu u testování DOMu a jednoduchých unit testů a postupně to třeba přijde samo :)
@jiri.pudil díky za rady :)
@JiříNápravník díky určitě mám v plánu na to taky kouknout
Editoval kleinpetr (20. 4. 2016 20:03)