Jak na testy Doctrine Entit, dao atd

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ondraondra81
Člen | 82
+
0
-

Ahoj,
prosím o radu.
Nikdy jsem zatím UnitTesty nepsal a tak úplně nevím odkud začít. Našel jsem nějaké příklady jak testovat jednoduché funkce typu (2*10)==20,

nasel jsem od DG nejaky navod jak otestovat presenter Sing:in, kterému rozumím, ale zde vím co očekávám,
Ale jak testovat třeba Doctinu a facade tridy že vrací skutečně co mají.
Jak testovat komponenty, formulare atd?

můžete mě prosím někdo nasměrovat (články, ukázky zrojaků s komentáři atd…)

Děkuji

Ja
Člen | 260
+
0
-

skoro bych rekl – bump! :-)

Jan Endel
Člen | 1016
+
0
-

Spíše tady dejte nějaký příklad, kousek kódu co byste chtěli otestovat, je to moc obecný dotaz na nějakou dlouhou odpověd.

matopeto
Člen | 395
+
0
-

Jan Endel napsal(a):

Spíše tady dejte nějaký příklad, kousek kódu co byste chtěli otestovat, je to moc obecný dotaz na nějakou dlouhou odpověd.

Si myslim, ze by sa nejaka dlha a obecna odpoved zisla, pripadne odkaz nejaky vacsi projekt komplet pokryty testami. Sam sa teraz predieram testovanim a nikde nevidim komplexne priklady, napr na testovanie modelov s databazou a pod.

Editoval matopeto (17. 8. 2015 18:08)

Luděk Veselý
Člen | 29
+
0
-

Na obecny dotaz obecna odpoved :-) Ja pouzivam Codeception a pracuje se mi s tim velmi dobre, mrkni na jejich stranky, maj tam priklady zapisu testu, quickstart, existuje kolem toho dost uzitecnych rozsireni. Pouzivaji ruzne druhy testu:

  1. Akceptacni – zde testujes aplikaci jako celek, jako uzivatel v prohlizeci. Na pozadi se spusti fakticky prohlizec a testy pises stylem ‚jdu na homepage‘, ‚klikam na ok‘, ‚vidim hlasku uspech‘…
  2. Funkcionalni se zapisuji podobne, nepouziva se ale prohlizec, takze jsou rychlejsi ale neotestujes javascript.
  3. Unit testy jsou vpodstate jen obalka nad PHPUnit, kontrolujes logiku jednotlivych metod/funkci. Muzes ale napriklad vyuzit pripojeni k databazi, vytvorit entitu a pak kontrolovat jak se ulozila do db..

Takze konkretne na formular si muzes napsat vic testu – v akceptacnim si napises kroky, ktere bs jinak proklikaval rucne, otestujes ze celkove funguje ok. Pak si muzes napsat treba unit test ve kterem otestujes metodu volanou pri odeslani formulare – zda ti vraci odpovidajici vystupy.. Moznosti je hodne a jak uz tady nekdo psal – nejlip posli konkretni kod ktery chces otestovat.

Azathoth
Člen | 495
+
0
-

za sebe bych řekl, že pokud máš jen obyčejné entity a nad nimi CRUD, tak si prostě otestuješ vůči testovací databází ten CRUD. tedy v testech si z kontejneru vytáhneš dao, zavoláš na něj create metodu, potom find, otestuješ, co ti to vrátilo, pak to zkusíš upravit, smazat…prostě budeš volat veřejné metody těch dao objektů, jako bys je volal jinde v aplikaci a budeš si validovat, co ti vrací. no a pokud tam budeš mít nějakou pořádnou business logiku, tak otestuj tu, ale ram už to není tolik o doctrine entitách jako takových… @ondraondra81 psal ses na tohle nebo jsi měl dotazem na mysli něco jiného?

Azathoth
Člen | 495
+
0
-

@LuděkVeselý jak ti v codeceptionu funguje attach file? já ho nemůžu rozchodit, když používám phantomjs, prostě to odmítne uploadnout. když přepnu na selenium webdriver, tak ten samý attach file šlape jako hodinky, ve firefoxu i v chrome. v phpbrowseru to taky funguje, ale ten phantomjs…

Azathoth
Člen | 495
+
0
-

@matopeto co se týče komplexnějších testů, tak ty se hodí na komplexnější aplikaci. když máš např. jen výše zmíněný crud, tak jsou testy primitivní. ale když máš něco složitějšího, tak těmi testy chceš simulovat reálné chování uživatelů. příklad s eshopem: vytáhneš si modelové třídy z DI. a zavoláš přidání položek do košíku. pak si zvaliduješ celkovou cenu. zkusíš do košíku přidat něco, od čeho už není ani jeden kus, jestli ti to hodí error (nebo jak řešíte tyhle případy). pak si zavoláš metody na dokončení objednávky a zkontroluješ,jestli sedí cena,jestli se počet dostupnuch kusů zmenšil o to, co sis objednal… otestuješ si registraci nového uživatele zavoláním metody, kterou v onSuccess volá revistrační form, aby vytvořil uživatele… no, obecná odpověď by byla podle mne asi ta, že tady nemá moc cenu dělat unit testy a všechno mockovat, ale dělat integrační testy.tedy jedeš na nějaké db (klidně i sqlite pro testy), ale netedtuješ presentery a formy, ale přímo model. a idea je podle mne taková, že nějakými veřrjnýmimetodami do té své aplikace budeš nějak šťouchat, dostaneš tam nějaká data/aplikaci do jiného stavu a pak si jknými metodami otestuješ, že se ti ta data fakt změnila, že se aplikace ocitla ve stavu, jaký očekáváš.

Luděk Veselý
Člen | 29
+
0
-

@Azathoth mas pravdu – ted to zkousim a hlasi mi to chybu:

[Facebook\WebDriver\Exception\WebDriverException] JSON decoding of remote response failed.
Error code: 4
The response: 'Invalid Command Method...

vypada to na nejaky problem primo s phantomjs v kombinaci s codeception, viz tento ticket na githubu

Azathoth
Člen | 495
+
0
-

na ticket jsem koukal. jen jsem doufal, že je to třeba staré a opravené a já jen něco dělám blbě.