Comment tester Symfony2 modèles à l'aide de PHPUnit
J'ai essayé de tester un modèle dans un projet Symfony2, mais je ne sais pas comment faire pour obtenir l'entité gestionnaire d'enregistrer et de restauration des enregistrements.
Quelqu'un peut me pointer à la droite de docs pour cela?
Symfony2 modèles devraient être du domaine des objets qui représentent des les modèles de domaine dans le code.
objets de domaine doit être défini purement pour mettre en œuvre l'entreprise
le comportement de la correspondante de la notion de domaine, plutôt que d'être défini
par les exigences plus spécifiques de la technologie de cadre. -- Domain-driven design de Wikipédia, l'encyclopédie libre.
Objets du domaine (et de ses tests) ne doit pas dépendre de Symfony2 Api et la Doctrine de l'Api, sauf si vous voulez vraiment tester eux-mêmes.
L'écriture des tests unitaires avec Symfony2 n'est pas différent que d'écrire des tests unitaires standards PHPUnit. -- Symfony - Test
Vous pouvez tester la logique d'entreprise (processus, règles, comportements, etc.) représenté dans le domaine des objets avec PHPUnit (ou Behat) et, généralement,test en double.
Oui, j'ai lu les docs et de comprendre ces concepts. Mais si je veux tester, par exemple, le comportement Sluggable, il ne fonctionne qu'à partir de l'enregistrement. Comment puis-je tester? passons sur le fait que le bundle est probablement testé, je veux juste voir comment tester des choses dans symfony2 Il est important pour nous de connaître les préoccupations essentielles du produit sont. Si vous développez le comportement Sluggable, c'est la chose la plus importante pour vous que le slug de la chaîne est correctement généré sur la base des valeurs de la sluggable champs, et donc vous devriez le tester. Bien sûr, vous pouvez tester si la valeur de la chute de champ est correctement stockées dans la base de données, mais il n'est pas au cœur des préoccupations du produit, et c'est un problème central de la Doctrine elle-même (et il est déjà testé). Oui, mais la chute est créé aftersave, afin de tester si la chaîne générée par est ok, j'ai pour enregistrer l'objet, de ne pas tester le sauver de lui-même (qui est bien sûr très testés par la Doctrine de l'équipe), mais à vérifier l'généré chaîne, qui est un sujet de préoccupation pour le système.
namespaceIbw\JobeetBundle\Tests\Repository;useSymfony\Bundle\FrameworkBundle\Test\WebTestCase;useSymfony\Bundle\FrameworkBundle\Console\Application;useSymfony\Component\Console\Output\NullOutput;useSymfony\Component\Console\Input\ArrayInput;useDoctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand;useDoctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand;useDoctrine\Bundle\DoctrineBundle\Command\Proxy\CreateSchemaDoctrineCommand;classCategoryRepositoryTestextendsWebTestCase{private $em;private $application;publicfunction setUp(){static::$kernel =static::createKernel();static::$kernel->boot();
$this->application =newApplication(static::$kernel);//drop the database
$command =newDropDatabaseDoctrineCommand();
$this->application->add($command);
$input =newArrayInput(array('command'=>'doctrine:database:drop','--force'=>true));
$command->run($input,newNullOutput());//we have to close the connection after dropping the database so we don't get "No database selected" error
$connection = $this->application->getKernel()->getContainer()->get('doctrine')->getConnection();if($connection->isConnected()){
$connection->close();}//create the database
$command =newCreateDatabaseDoctrineCommand();
$this->application->add($command);
$input =newArrayInput(array('command'=>'doctrine:database:create',));
$command->run($input,newNullOutput());//create schema
$command =newCreateSchemaDoctrineCommand();
$this->application->add($command);
$input =newArrayInput(array('command'=>'doctrine:schema:create',));
$command->run($input,newNullOutput());//get the Entity Manager
$this->em =static::$kernel->getContainer()->get('doctrine')->getManager();//load fixtures
$client =static::createClient();
$loader =new \Symfony\Bridge\Doctrine\DataFixtures\ContainerAwareLoader($client->getContainer());
$loader->loadFromDirectory(static::$kernel->locateResource('@IbwJobeetBundle/DataFixtures/ORM'));
$purger =new \Doctrine\Common\DataFixtures\Purger\ORMPurger($this->em);
$executor =new \Doctrine\Common\DataFixtures\Executor\ORMExecutor($this->em, $purger);
$executor->execute($loader->getFixtures());}publicfunction testFunction(){//here you test save any object or test insert any object }protectedfunction tearDown(){
parent::tearDown();
$this->em->close();}}
Tandis que ceci peut théoriquement répondre à la question, il serait préférable pour inclure l'essentiel des éléments de réponse ici, et de fournir le lien de référence.
Afin de tester vos modèles, vous pouvez utiliser la méthode setUp (). lien vers les docs
Espère que cela vous aide
Et voici un lien vers les docs @symfony.com - symfony.com/doc/current/cookbook/testing/doctrine.html
OriginalL'auteur Benjamin Lazarecki
Symfony2 modèles devraient être du domaine des objets qui représentent des les modèles de domaine dans le code.
Objets du domaine (et de ses tests) ne doit pas dépendre de Symfony2 Api et la Doctrine de l'Api, sauf si vous voulez vraiment tester eux-mêmes.
Vous pouvez tester la logique d'entreprise (processus, règles, comportements, etc.) représenté dans le domaine des objets avec PHPUnit (ou Behat) et, généralement,test en double.
Il est important pour nous de connaître les préoccupations essentielles du produit sont. Si vous développez le comportement Sluggable, c'est la chose la plus importante pour vous que le slug de la chaîne est correctement généré sur la base des valeurs de la sluggable champs, et donc vous devriez le tester. Bien sûr, vous pouvez tester si la valeur de la chute de champ est correctement stockées dans la base de données, mais il n'est pas au cœur des préoccupations du produit, et c'est un problème central de la Doctrine elle-même (et il est déjà testé).
Oui, mais la chute est créé aftersave, afin de tester si la chaîne générée par est ok, j'ai pour enregistrer l'objet, de ne pas tester le sauver de lui-même (qui est bien sûr très testés par la Doctrine de l'équipe), mais à vérifier l'généré chaîne, qui est un sujet de préoccupation pour le système.
OriginalL'auteur iteman
comme dans ce Lien : Jobeet Unité De Test Tutoriel
expliquer comment Tester l'Entité et l'Entité Référentiel
OriginalL'auteur ahmed hamdy