Testování PHPUnit s aktuální verzí Nette
- patriksima
- Člen | 58
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
@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
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
@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
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
@patriksima: Fakt netuším, co máš za problém. Třeba ti pomůže https://github.com/…b737df/tests
- patriksima
- Člen | 58
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
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
@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
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
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
Když už se tady porovnávají různé testovací frameworky, co si myslíte o Codeception?
- patriksima
- Člen | 58
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
@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
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
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
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
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
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
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.
- patriksima
- Člen | 58
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
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
@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
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
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
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.