Jak testovat databázi v Nette Tester?
- Facedown
- Člen | 38
Ahoj,
mám databázové dotazy, které mám v modelu a potřebuji je nějak otestovat. Tyto dotazy obsahují přímo logiku, takže v podstatě tyto dotaz musím spustit, abych věděl jestli je vše podle očekávání.
Samotný test na testovací databázi MySQL trvá relativně dlouho oproti samotnému unit testu. Testuji databázi takovým způsobem, že před každým spuštěním testu zavolám TRUNCATE na dané tabulky se kterými pracuji.
Myslíte, že je to dobrý způsob? Jak testujete databázi Vy? Nějaký tipy a triky?
Díky
- Svaťa Šimara
- Člen | 98
Pokud používáš ORM, tak můžeš zkusit SQLite memory databázi. Tato technika funguje dobře s Doctrine.
Ale odhaduju, že budeš mít dotazy specifické pro MySQL. Pro zrychlení si zkus vytvořit RAM disk, a do něj nasměruj MySQL úložiště.
Pokud nepotřebuješ cizí klíče, je nejjednodužší zkusit MySQL MEMORY tabulky místo MyISAM.
- Facedown
- Člen | 38
Fafin napsal(a):
Pokud používáš ORM, tak můžeš zkusit SQLite memory databázi. Tato technika funguje dobře s Doctrine.
Ale odhaduju, že budeš mít dotazy specifické pro MySQL. Pro zrychlení si zkus vytvořit RAM disk, a do něj nasměruj MySQL úložiště.
Pokud nepotřebuješ cizí klíče, je nejjednodužší zkusit MySQL MEMORY tabulky místo MyISAM.
ORM nepoužívám, dotazy jsou psané přímo pro MySQL. Máš nějaký odkaz, ve kterém bych mohl zjistit více jak vytvořit RAM disk pro nasměrování MySQL?
- skrivy
- Člen | 51
Jak to delam ja (prikladove). Pokud testuju vytvoreni noveho zaznamu (treba uzivatele), tak si pomoci Fackeru vytvorim noveho uzivatele a zkusim se na nej prihlasit.
Pokud testuju nejake specificke selecty (treba jeden user muze videt jenom svoje clanky a ne cizi), tak si na zacatku (jeste pred spustenim samotneho testeru) dropnu databazi, vytvorim cistou, importnu tam testovaci data a na tech pracuju. Pokud potrebuje vic testu soucasne pracovat s jednim konkretnim radkem, tak ho duplikuji (treba misto jednoho uzivatele udelam zvlastniho uzivatele pro kazdy test, at se mi to nehada).
Nevim, jestli to je nejlepsi metoda, ale funguje to.
Editoval skrivy (13. 4. 2016 23:09)
- Pavel Kravčík
- Člen | 1196
Já jsem teď začal kokekotvat s testerem a docela se mi líbí tohle řešení:
https://github.com/…eLocator.php#L38
Do testeru si pak dávám php.ini ze serveru a část „ostrých“ dat vytažených z DB.
- mrtnzlml
- Člen | 140
Podobně to řeší Testbench (NDB), který připravuje čisté databáze podle nastavení v configu a vrací Context (nebo EntityManager). Představoval jsem v ČB na Poslední sobotě. :) Možno jako inspirace…
- Pavel Kravčík
- Člen | 1196
@mrtnzlml: Jo to je pěkný, na to jsem koukal už někde před měsícem, ale bohužel forknutí a úprava na yetORM (upravené) by zabrala víc času, než si udělat nějakou simple class na získávání DB.
- mrtnzlml
- Člen | 140
Pavel Kravčík napsal(a):
@mrtnzlml: Jo to je pěkný, na to jsem koukal už někde před měsícem, ale bohužel forknutí a úprava na yetORM (upravené) by zabrala víc času, než si udělat nějakou simple class na získávání DB.
Také hodně záleží jestli se to ORM umí připojit lazy, jinak by to ani nemělo smysl. Umí? Doctrine i NDB ano, proto tam jsou…
- Svaťa Šimara
- Člen | 98
@Facedown ehm… https://www.google.cz/search?… https://www.google.cz/search?…
Každopádně toto vypadá jako dobrý hack (zkusil bych nejdřív
v dockeru/virtualu/na stroji, který nemám rád):
https://blog.ionelmc.ro/…-ramdisk-it/
Sám jsem nikdy nepoužil, ale myšlenka použít RAM místo disku zní jako plán.