PHPUnit, mockování a factories

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

Zdravím,
začínám s testováním (PHPUnit) a řeším následující problém:

  • v setUpu si vytvořím container
  • testuju model, který získávám způsobem $container->createMyModel();
  • model pracuje s db, kterou dostane v konstruktoru při vytvoření továrnou

Je možné nějak mockovat db, pokud získávám instanci modelu popsaným způsobem? Případně, je možné to řešit nějak inteligentněji? Za nakopnutí budu ráda. Mám v téhle oblasti zatím opravdu minimální rozhled.

NetteTester zatím používat nechci (potřebuju se naučit testovat způsobem, který bude použitelný i pro projekty bez Nette) a nějaký větší refaktoring nebo upgrade na novější verzi Nette u dotyčného projektu zatím není v plánu.

Filip Klimeš
Nette Blogger | 156
+
0
-

chikeet napsal(a):

Zdravím,
začínám s testováním (PHPUnit) a řeším následující problém:

  • v setUpu si vytvořím container
  • testuju model, který získávám způsobem $container->createMyModel();
  • model pracuje s db, kterou dostane v konstruktoru při vytvoření továrnou

Je možné nějak mockovat db, pokud získávám instanci modelu popsaným způsobem? Případně, je možné to řešit nějak inteligentněji? Za nakopnutí budu ráda. Mám v téhle oblasti zatím opravdu minimální rozhled.

NetteTester zatím používat nechci (potřebuju se naučit testovat způsobem, který bude použitelný i pro projekty bez Nette) a nějaký větší refaktoring nebo upgrade na novější verzi Nette u dotyčného projektu zatím není v plánu.

S PHPUnit zkušenosti nemám, ale Nette Tester můžeš používat i bez Nette :) stačí si ho stáhnout nebo nainstalovat přes composer
composer require --dev nette/tester 1.1

Modely se obecně dají mockovat přes Mockery, nebo sympatičtějšího Mockistu (kromě jiných). Takže si místo $container->createMyModel() vytvoříš mock, kterému nastavíš funkce a jejich návratové hodnoty.

Editoval FilipKlimeš (23. 4. 2014 21:46)