Jak testovat databázi v Nette Tester?

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

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
+
+1
-

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
+
0
-

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
+
+2
-

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
+
+2
-

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
+
+1
-

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
+
0
-

@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
+
0
-

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…

Pavel Kravčík
Člen | 1196
+
0
-

Jasně, umí. Každopádně souhlasím, že testbench je ještě lepší příklad. ;)

Svaťa Šimara
Člen | 98
+
+1
-

@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.