Nette\Tester: jak začít testovat?
- hAssassin
- Člen | 293
Ahoj, začínám si hrát s testováním a s Nette\Testerem a je to v celku zajímavá věc, která se mi podařila nějak rozjet a nějak funguje, ale jen občas. Mám např problémy s databází (rád bych si vytvořil pro každý test testovací DB do který nalil data, nad nimi provedl testy a db pak zase dropnul, což sice funguje, ale pokud mám různý create SQLka pro různý testy, tak se nějak bije), s vytvořením kontejneru pro testování extenzí (s tím aby se mi načítaly testovací konfigy), apod.
Co sem koukal do zdrojáků testu pro Nette a do pár věcí v Kdyby, tak se to hodně liší a je v tom docela hokej a doku je celkem stručná. Nejsou někde nějaký lepší materiály? Taky hledám záznam z přednášky o Nette\Testeru od HosipLana z poslední soboty, ale našel jsem jen slajdy, předpokládám že video asi bohužel není?
Díky za nějaký info.
- llook
- Člen | 407
Tester pouští více testů najednou, takže pokud používají databázi, máš dvě možnosti:
- Testy serializovat (jde to nějakou anotací, teď z hlavy nevím), aby ty testy neběžely zároveň.
- Nebo pro každý test vytvářet unikátní databázi.
Druhou možnost používám já. Sice v PHPUnit, ale v Testeru to bude dost podobné. Vypadá to nějak takto: https://github.com/…TestCase.php#L45
Zkrátka v cyklu zkusím vytvořit databázi prefix_1
, pokud
už existuje, zkusím prefix_2
atd., až když se podaří
databázi vytvořit a nastavit, tak z cyklu vyskočím.
Čas od času testy failnou takovým způsobem, že neproběhne tearDown, takže jednou za čas to chce dropnout ty databáze, které po takových failech zůstaly.
- hAssassin
- Člen | 293
diky za info,
ano o serializaci se pokousim, je na to Tester\Helpers::lock() nebo tak neco a
lock soubor to skutecne vytvari ale asi to stejne moc nefunguje.
Takze je mozny mit nekolik bootstrapu, napr pro kazdou cast aplikaci jeden, a pak podle potreby nacitat boostrapy pro dany test/testcase.
A to je dalsi vec, co se ma pouzivat? Obyc PHP nebo tridu TestCase? Ta trida se mi libi vic, ale je tam pak hodne zavislosti a ty se mi ne vzdy predavaji.
- Jirda
- Člen | 103
hAssassin napsal(a):
diky za info,
ano o serializaci se pokousim, je na to Tester\Helpers::lock() nebo tak neco a lock soubor to skutecne vytvari ale asi to stejne moc nefunguje.Takze je mozny mit nekolik bootstrapu, napr pro kazdou cast aplikaci jeden, a pak podle potreby nacitat boostrapy pro dany test/testcase.
A to je dalsi vec, co se ma pouzivat? Obyc PHP nebo tridu TestCase? Ta trida se mi libi vic, ale je tam pak hodne zavislosti a ty se mi ne vzdy predavaji.
Ja pouzivam ten lock a funguje to podle me dobre. Testuju sice jen na jedne databazi, kterou vzdycky nastavim na nejaky pocatecni stav na zacatku testu, ale ten lock to resi dobre.
Jinak tady je treba hezka ukazka inicializace https://forum.nette.org/…ace-databaze od Filipa Prochazky nebo se podivej do testu LeanMapperu, ktery ma testy v nette/tester https://github.com/…evelop/tests
- hAssassin
- Člen | 293
Jirda > ano, ten lock pouzivam, ale asi blbe. Kazdopadne lock soubor se vytvori na spravnem miste, akorat me tak napada, neni potreba ho zase smazat? Nebo se to deje automaticky? Vychazim ze starsich HosipLanovych testu, kde to zamyka a odemyka rucne sam. Ale Helpers zadnou unlock metodu nemaji.
A jeste me napadlo, jak docilit toho aby se mi spravne nacitaly tridy (hlavne ty moje) bez nutnosti vytvaret container v bootstrapu? Rad bych mel pro kazdou sadu testu vlastni container i configurator, ktery bych si vytvoril az v danem TestCasu. Rucne vytvorit pouze Autoloader? Nepouzivam totiz Composer a tady mi to taky trochu zlobi :(
Editoval hAssassin (13. 7. 2013 20:04)
- zool
- Člen | 144
Ahojte chtěl jsem se zeptat, stáhl jsem si nejnovejší nette a k tomu tester, když to zpustím, tak mi to hned napíše chybu
-- FAILED: test\tests\ExampleTest.phpt
Exited with error code 255 (expected 0)
Fatal error: Call to undefined function Nette\Utils\mb_convert_encoding() in
D:\xampp1\htdocs\test\vendor\nette\nette\Nette\Utils\Strings.php on line 53
FAILURES! (1 tests, 1 failures, 0.0 seconds)
Nevíte někdo jak to opravit?
Děkuji
- VladimirHans
- Člen | 12
Ahoj,
na linuxu se podívej, jestli máš v php podporu mbstring (bývá to balíček
php-mbstring). V případě Windows už by tam mohl být zakompilovaný v php.
Přidej řádek do php.ini extension=mbstring.so
popř.
extension=mbstring.dll
. Pak je důležité spouštět tester
s explicitním zadáním php.ini:
php /cesta/k/tester.php -c /cesta/k/php.ini /cesta/k/souborum/s/testy