Test unitaire des objets Doctrine avec PHPUnit
Question
Je commence à essayer de tester mes objets Doctrine avec PHPUnit et je souhaite recharger à nouveau la base de données à partir de mes objets modèle.
Ma première tentative ressemble à quelque chose comme ceci:
class Tests_User extends PHPUnit_Framework_TestCase
{
public function setUp()
{
Doctrine_Manager::connection('mysql://user:pass@localhost/testdb');
Doctrine::createDatabases();
Doctrine::createTablesFromModels('../../application/models');
}
public function testSavingWorks()
{
$user = new User();
$user->save();
}
public function testSavingWorksAgain()
{
$user = new User();
$user->save();
}
public function tearDown()
{
Doctrine::dropDatabases();
}
}
Le problème est que, lorsque setUp () est appelé à nouveau pour le deuxième test, createTablesFromModels () échoue. Un message d'erreur s'affiche, car aucune des tables n'est présente.
J'apprécierais vraiment un exemple montrant comment quelqu'un d'autre a réinitialisé une connexion Doctrine pour PHPUnit ou à d'autres fins de tests unitaires.
La solution
Il s'avère donc que createTablesFromModels inclut les fichiers, puis compare les listes de classes définies avant et après, raison pour laquelle cela ne fonctionne pas deux fois.
Une séquence comme celle ci-dessous fonctionne lorsqu'elle est répétée:
Doctrine::loadModels($path);
Doctrine::createTablesFromArray(Doctrine::getLoadedModels());
Autres conseils
Découvrez cette liste d’opérateurs d’Ocramius, qui indique que vous pouvez effectuer des tests à l’aide de données fixes: https: // gist .github.com / Ocramius / 3994325