symfony - Unité testant des objets Doctrine avec PHPUnit




database install (4)

Donc, il s'avère que createTablesFromModels inclut les fichiers dans et ensuite compare les listes de classes définies avant et après, ce qui explique pourquoi il ne fonctionne pas deux fois.

Une séquence comme celle-ci fonctionne quand elle est répétée:

Doctrine::loadModels($path);
Doctrine::createTablesFromArray(Doctrine::getLoadedModels());

Je commence à essayer et tester mes objets Doctrine avec PHPUnit, et je voudrais recharger la DB de mes objets modèles à chaque fois.

Ma première tentative ressemble à ceci:

class Tests_User extends PHPUnit_Framework_TestCase
{

    public function setUp()
    {

        Doctrine_Manager::connection('mysql://user:[email protected]/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 second test, createTablesFromModels () échoue, donc j'obtiens une erreur car aucune des tables n'est présente.

J'apprécierais vraiment un exemple de la façon dont quelqu'un d'autre a réinitialisé une connexion Doctrine pour PHPUnit ou d'autres tests unitaires.




Voici une solution utilisant la méthode magique __invoke

(Disponible depuis PHP 5.3)

class Foo {
    public function __invoke($method=null, $args=[]){
        if($method){
            return call_user_func_array([$this, $method], $args);
        }
        return false;
    }

    public function methodName($arg1, $arg2, $arg3){

    }
}

De l'intérieur de la même classe:

$this('methodName', ['arg1', 'arg2', 'arg3']);

À partir d'une instance d'un objet:

$obj = new Foo;
$obj('methodName', ['arg1', 'arg2', 'arg3'])




php doctrine phpunit