Testování PHPUnit s aktuální verzí Nette

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

ahoj,

vytvořil jsem si test case v phpunit dle návodů tady na fóru, ale po celodenním hraní mi to pořád nejede.

můžu někoho poprosit o step-by-step návod pro aktuální verzi Nette a PHPunit.

díky

Po spuštění testů z konzole to skončí hláškou:

PHP Fatal error:  Call to a member function getByType() on a non-object in Nette/loader.php on line 2189
Jan Tvrdík
Nette guru | 2595
+
0
-

@patriksima: S takovýmto popisem chyby jdi do háje. To je takový problém použít neminimalizovanou verzi Nette, přidat ukázku kódu, který chybu způsobuje, odkaz na návody, ze kterých vycházíš apod.?

patriksima
Člen | 58
+
0
-

Vycházím z site:forum.nette.org phpunit

Chyba je tady

patriksima
Člen | 58
+
0
-

Jan Tvrdík napsal(a):

@patriksima: S takovýmto popisem chyby jdi do háje. To je takový problém použít neminimalizovanou verzi Nette, přidat ukázku kódu, který chybu způsobuje, odkaz na návody, ze kterých vycházíš apod.?

tady ani tak nejde o tu chybu, jako o ten návod, který ulehčí život dalším. nebudou muset prolézat celé forum a zkoušet celý den pokus-omyl.

Jan Tvrdík
Nette guru | 2595
+
0
-

@patriksima: A to navrhované řešení ti nepomohlo?

návod, který ulehčí život dalším

Netuším, co potřebuješ vysvětlit. Dokumentace k PHPUnitu je dostupná zdarma na internetu.

patriksima
Člen | 58
+
0
-

Jan Tvrdík napsal(a):

@patriksima: A to navrhované řešení ti nepomohlo?

návod, který ulehčí život dalším

Netuším, co potřebuješ vysvětlit. Dokumentace k PHPUnitu je dostupná zdarma na internetu.

A ty tam nějaké řešení vidíš? :)

Možná ani nemusí být návod. Stačí mi kompletní zdroják jednoho z testů, který ti funguje, plus nastavení phpunitu (případně úpravy bootstrapu a configu pokud jsou pro phpunit nutné). To bude za tisíc slov.

Díky

Jan Tvrdík
Nette guru | 2595
+
0
-

@patriksima: Fakt netuším, co máš za problém. Třeba ti pomůže https://github.com/…b737df/tests

Filip Procházka
Moderator | 4668
+
0
-

Kdybys raději použil nette/tester ;)

jasir
Člen | 746
+
0
-

Já nevim, umí Nette tester výstup do Sonaru a další QA tools? Codecoverage? Bez toho by se podle mě doporučovat neměl.

patriksima
Člen | 58
+
0
-

Jan Tvrdík napsal(a):

@patriksima: Fakt netuším, co máš za problém. Třeba ti pomůže https://github.com/…b737df/tests

Čemu nerozumíš? Chci otestovat any Presenter pomocí PHPunit a nedaří se mi to nastavit tak, aby to fungovalo.

Jak mi v tom pomůže uvedený odkaz? Nejsem Nette guru, takže mi to klidně napiš jak pětiletýmu.

patriksima
Člen | 58
+
0
-

Filip Procházka napsal(a):

Kdybys raději použil nette/tester ;)

Proč to používat? V čem je to lepší než PHPunit?

Jan Tvrdík
Nette guru | 2595
+
0
-

@patriksima: Wow, začínají z tebe padat první užitečné informace. Právě ses poprvé zmínil o tom, že chceš otestovat presenter. Nicméně to není úplně triviální, takže postupně. Už ti funguje http://www.phpunit.de/…phpunit.html#… ?

Jan Tvrdík
Nette guru | 2595
+
0
-

patriksima wrote:

Filip Procházka napsal(a):

Kdybys raději použil nette/tester ;)

Proč to používat? V čem je to lepší než PHPunit?

PHPUnit je zralý na refactoring. Nette\Tester výrazně usnadňuje debugging testů a umožňuje jejich paralelní spouštění.

patriksima
Člen | 58
+
0
-

Jan Tvrdík napsal(a):

@patriksima: Wow, začínají z tebe padat první užitečné informace. Právě ses poprvé zmínil o tom, že chceš otestovat presenter. Nicméně to není úplně triviální, takže postupně. Už ti funguje http://www.phpunit.de/…phpunit.html#… ?

Ano

enumag
Člen | 2118
+
0
-

Když už se tady porovnávají různé testovací frameworky, co si myslíte o Codeception?

Jan Tvrdík
Nette guru | 2595
+
0
-

@patriksima: Četl jsi https://tester.nette.org/cs/#…

Milo
Nette Core | 1283
+
0
-

jasir napsal(a):

Já nevim, umí Nette tester výstup do Sonaru a další QA tools? Codecoverage? Bez toho by se podle mě doporučovat neměl.

Codecoverage umí. Ale nejsem tak zkušený tester, tedy Sonar a QA tools neznám.

patriksima
Člen | 58
+
0
-

Jan Tvrdík napsal(a):

@patriksima: Četl jsi https://tester.nette.org/cs/#…

Pokud je testování v Nette/Tester výrazně jednodušší než v PHPunit, tak v rámci ušetření času použiji toto.
Potřebuji otestovat Presenter, který zapisuje něco do databáze. Má Nette/Tester něco jako PHPUnit_Extensions_Database_TestCase?

Jan Tvrdík
Nette guru | 2595
+
0
-

@patriksima: Presenter nemá nic zapisovat do databáze. Nejen proto, že se to hůře testuje. A databázové extenze PHPUnitu je přesně to, co ti doporučuji nepoužívat, chceš-li si ušetřit starosti. Nette\Tester nic takové nemá. Korektní postup pro testování databáze je (zjednodušeně) mít samostatnou databázi, na kterou se testy budou spouštět. Před začátkem testování ji vždy přeinstaluješ, nahraješ do ní testovací data, spustíš testovanou metodu, ověříš, že je databáze v očekávaném stavu a databázi uklidíš (např. pomocí TRUNCATE).

patriksima
Člen | 58
+
0
-

Jan Tvrdík napsal(a):

@patriksima: Presenter nemá nic zapisovat do databáze. Nejen proto, že se to hůře testuje. A databázové extenze PHPUnitu je přesně to, co ti doporučuji nepoužívat, chceš-li si ušetřit starosti.

Ok, co mi teda doporučuješ používat? Existuje nějaká dokumentace k tajemnému Nette/Tester? Protože já nikde nic nenašel.

Korektní postup pro testování databáze je (zjednodušeně) mít samostatnou databázi, na kterou se testy budou spouštět.

Předpokládám, že se to nastaví načtením config.local.neon v bootstrapu testovacího adresáře. Je to tak?

Před začátkem testování ji vždy přeinstaluješ, nahraješ do ní testovací data

Jak to udělám v Nette/Tester?

, spustíš testovanou metodu, ověříš, že je databáze v očekávaném stavu a databázi uklidíš (např. pomocí TRUNCATE).

Ano, chci spustit action presenteru, který mimo jiné pracuje s nějakými modely a ověřit co to udělalo nejen v databázi. Jak to udělám?

Jan Tvrdík
Nette guru | 2595
+
0
-

Ok, co mi teda doporučuješ používat?

PHPUnit bez databázové extenze (a spousty dalších zbytečných a nepoužitelných extenzí).

Existuje nějaká dokumentace k tajemnému Nette/Tester?

Neexistuje. Vím jen o http://filip-prochazka.com/…r-a-phpstorm.

Předpokládám, že se to nastaví načtením config.local.neon v bootstrapu testovacího adresáře.

Třeba tak.

Jak to udělám v Nette/Tester?

Stejně jako všude jinde. Zavoláš PHP funkce, které to za tebe udělají (např. mysqli_query) . Ano, musíš umět programovat.

Ano, chci spustit action presenteru, který mimo jiné pracuje s nějakými modely a ověřit co to udělalo nejen v databázi.

Takže ty nechceš psát unit testy, ale chceš psát integrační testy. Zajímavé :) Nicméně postup je velmi podobný, vyrobíš Application\Request a předáš ho instanci presenteru. Viz https://tester.nette.org/cs/#….


@patriksima: Btw: uvědomuješ si, že všechny ty informace, které z tebe pomalu padají měli být úvodním příspěvku? Zatajování informací je dobré akorát k tomu, aby ti nikdo neporadil.

patriksima
Člen | 58
+
0
-

Takže sice existuje nějaký Nette\Tester o kterém se tvrdí, že je lepší než PHPunit, ale seriozní srovnání není. Nemá dokumentaci. A až na autora a pár vyvolených, kteří na tom nechali desítky hodin, to nikdo neumí používat?

To vypadá, že z toho není východisko, pokud na tom nechci nechat další dny, které nemám.

patriksima
Člen | 58
+
0
-

Jan Tvrdík napsal(a):

@patriksima: Btw: uvědomuješ si, že všechny ty informace, které z tebe pomalu padají měli být úvodním příspěvku? Zatajování informací je dobré akorát k tomu, aby ti nikdo neporadil.

Ne, to si skutečně neuvědomuji. Zřejmě nejsem tak dokonalý, abych kladl dokonalé dotazy. Sorry, ale ten tvůj přístup spíše způsobí, že se nebude ptát nikdo. Nechtěl bys přehodnotit svůj přístup na více konstruktivní, než poučující?

hrach
Člen | 1838
+
0
-

Tyvoe, prej nema dokumentaci a nikdo neumi pouzivat. Zato PHP Unit ma stovky tutorialu, dokumentaci, ale ty se s tim plahocis, jakoby to bylo celosvetovy tajemstvi. Neposledne si dostal odkaz na konkretne implemetaci PhpUnitu s Nette.

Pokud jde o konstruktivni pristup, tak tu akorat hazis kolem sebe srackovity posty s prinosem 0.

1. post – absolutne spatne, nedodrzuje vubec nic. Chybejici verze sw, minifikovane nette, chybejici cast kodu k reprodukci. Fail od shora az dolu.

Sorry ale ten tvuj pristup pusobi, ze ni nikdo neodpovi a vysere se na tebe. Nechtěl bys přehodnotit svůj přístup na více konstruktivní, než poučující?

patriksima
Člen | 58
+
0
-

hrach napsal(a):

Tyvoe, prej nema dokumentaci a nikdo neumi pouzivat. Zato PHP Unit ma stovky tutorialu, dokumentaci, ale ty se s tim plahocis, jakoby to bylo celosvetovy tajemstvi. Neposledne si dostal odkaz na konkretne implemetaci PhpUnitu s Nette.

Rozhodně má více tutoriálu než Nette/Tester.

>

Pokud jde o konstruktivni pristup, tak tu akorat hazis kolem sebe srackovity posty s prinosem 0.

Já jsem ten co se ptá a neví. Přínosem mají být přece vaše odpovědi, nikoli moje.

1. post – absolutne spatne, nedodrzuje vubec nic. Chybejici verze sw, minifikovane nette, chybejici cast kodu k reprodukci. Fail od shora az dolu.

Co mám dodržovat?

>

Sorry ale ten tvuj pristup pusobi, ze ni nikdo neodpovi a vysere se na tebe. Nechtěl bys přehodnotit svůj přístup na více konstruktivní, než poučující?

Díky za radu. Tady se jistě zeptám znovu.

hrach
Člen | 1838
+
0
-

Co mám dodržovat?

Máš to červeně nad textareou.

patriksima
Člen | 58
+
0
-

hrach napsal(a):

Co mám dodržovat?

Máš to červeně nad textareou.

Sorry, to jsem přehlídl.

„Kdo chce, hledá způsoby, kdo nechce, hledá důvody.“

redhead
Člen | 1313
+
0
-

Budu tady jeden z mála, který ti doporučuje se na Nette\Tester prozatím vykašlat. Tolik výhod to zase nemá. To, že je PHPUnit moloch, který má někdy naprosto děsnou použitelnost, je pravda, a například testování DB je naprosto děsný. Pro nováčka to je ale dostačující, neboť existuje nespočet tutoriálů a má dokumentaci.

Nicméně, je vidět, že máš problém ne tolik s integrací PHPUnitu s Nette, jako spíš s testováním obecně. Nevíš co a jak testovat, takže bych ti nejdřív doporučoval si projít nějaké články o testování obecně (doporučuju si přečíst sérii článků na zdrojáku, ale neber si vše tam moc k srdci). Testovat presenter tím, že budeš kontrolovat, co zapisuje do databáze, je fakt blbě.

Nejlepším zdrojem je se dívat přímo do zdrojáků. Namátkou:

https://github.com/…master/tests

https://github.com/…master/tests (knihovna, která pracuje s databází)

Milo
Nette Core | 1283
+
0
-

@patriksima: Z toho, že posíláš pull requesty do repozitáře by se dalo soudit, že nějaké zkušenosti už máš. A pak tady na fórum postneš dotaz se základními nedostatky. Odpovědět na něj tak jak je, zabere lidem spoustu času. Dočíst od prvního příspěvku sem zabere času ještě víc. Uvědom si, že ty lidi Ti věnujou svůj čas a to je drahá věc. Kdyby ses rozepsal víc do detailů, co jsi dělal a jak bylo by vidět „že jsi se snažil“, namísto požadavku „chci postup step-by-step“.

Nedivím se, že jsou kluci naštvaní. Tenhle problém se tu totiž točí pořád dokola. Ale rozhlídni se po fóru sám. Když se konstruktivně zeptáš, bude Ti konstruktivně odpovězeno.

patriksima
Člen | 58
+
0
-

Milo napsal(a):

@patriksima: Z toho, že posíláš pull requesty do repozitáře by se dalo soudit, že nějaké zkušenosti už máš.

Zkušenosti s čím? S kladením dotazů? Jak to souvisí?

A pak tady na fórum postneš dotaz se základními nedostatky. Odpovědět na něj tak jak je, zabere lidem spoustu času.

Vážně? Skutečně bylo tak těžké, mi v prvním postu napsat. Promiň nemám dost informací, můžeš mi odpověďet na… Místo ty voe jdi do háje s takovým dotazem?

Dočíst od prvního příspěvku sem zabere času ještě víc. Uvědom si, že ty lidi Ti věnujou svůj čas a to je drahá věc.

Mě spíš přijde, že rádi věnujou čas na výkřiky ad hominem, místo skutečného řešení problému. Tohle Nette nedělá dobrou reklamu.

Kdyby ses rozepsal víc do detailů, co jsi dělal a jak bylo by vidět „že jsi se snažil“, namísto požadavku „chci postup step-by-step“.

Ale já chci postup step-by-step. Jak pro pětileté dítě. To je zcela legitimní požadavek.

>

Nedivím se, že jsou kluci naštvaní. Tenhle problém se tu totiž točí pořád dokola. Ale rozhlídni se po fóru sám. Když se konstruktivně zeptáš, bude Ti konstruktivně odpovězeno.

Ano, rozhlídl jsem se a viděl podobné elitářsko-egocentrické posty typu já jsem Nette guru, ty jsi blbec.

Sorry, ale tohle asi není cesta jak přilákat lidi, aby Nette použivali seriozně.

patriksima
Člen | 58
+
0
-

redhead napsal(a):

Budu tady jeden z mála, který ti doporučuje se na Nette\Tester prozatím vykašlat. Tolik výhod to zase nemá. To, že je PHPUnit moloch, který má někdy naprosto děsnou použitelnost, je pravda, a například testování DB je naprosto děsný. Pro nováčka to je ale dostačující, neboť existuje nespočet tutoriálů a má dokumentaci.

Já mám s PHPunitem opačné zkušenosti.

>

Nicméně, je vidět, že máš problém ne tolik s integrací PHPUnitu s Nette, jako spíš s testováním obecně.

Z čeho tak usuzuješ?

Nevíš co a jak testovat, takže bych ti nejdřív doporučoval si projít nějaké články o testování obecně (doporučuju si přečíst sérii článků na zdrojáku, ale neber si vše tam moc k srdci). Testovat presenter tím, že budeš kontrolovat, co zapisuje do databáze, je fakt blbě.

Naopak, vím přesně co chci otestovat. Neřešme podružné otázky, co má nebo nemá Presenter obsahovat. Pojďme řešit, jak jde otestovat jeho metody.

>

Nejlepším zdrojem je se dívat přímo do zdrojáků. Namátkou:

https://github.com/…master/tests

https://github.com/…master/tests (knihovna, která pracuje s databází)

Čtení zdrojáku nepovažuji za nejlepší zdroj. Pro mě je ideální zdroj tutoriál přímo od Davida.

Filip Procházka
Moderator | 4668
+
0
-

V tom případě máš smůlu. Vsadím se o co chceš, že David psát návody na PHPUnit nebude :)

Chápal bych, že se bráníš, když na tebe někdo útočí. Ta forma upozornění, že na tvůj dotaz bychom museli vytáhnout věšteckou kouli nebyla nejvhodnější, kluci mají ovšem pravdu. Nechápu ale, proč útočíš na @redhead a @milo, kteří napsali velice slušné odpovědi.

Pojďme za tím udělat takhle čáru


Tak a teď znovu

  • Máš přečtený seriál o testování na zdrojáku?
  • Co chceš vlastně testovat? Presentery se netestují, to je prasárna, už jenom proto, že presentery samy o sobě dělají obludně moc věcí. Ty bys měl testovat modely, které jsou v presenterech použity. A nebo udělat seleniové testy. Testovat přímo presentery je dle mého hloupost.
  • Studiem zdrojáků se toho nejvíce naučíš, daleko více než ze všechn tutoriálů dohromady.

Pokud chceš používat raději Nette\Tester, tak tady máš několik knihoven, které jej všechny používají. Prostým copy&paste jsi schopný takové testovací prostředí zduplikovat – a dokonce jsem ti k tomu napsal step-by-step návod ;) A samozřejmě pak můžeš ještě použít i přístup jako je přímo v testech Nette.

Jan Tvrdík
Nette guru | 2595
+
0
-

Zamykám to tady. Tohle nemá cenu.

@patriksima: Začni znova a lépe.