Я пытаюсь протестировать модель в проекте Symfony2, но я не знаю, как заставить менеджера сущностей сохранять и извлекать записи.
Может ли кто-нибудь указать мне правильные документы для этого?
Я пытаюсь протестировать модель в проекте Symfony2, но я не знаю, как заставить менеджера сущностей сохранять и извлекать записи.
Может ли кто-нибудь указать мне правильные документы для этого?
Чтобы проверить свои модели, вы можете использовать метод setUp(). ссылка на документы
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class MyModelTest extends WebTestCase
{
/**
* @var EntityManager
*/
private $_em;
protected function setUp()
{
$kernel = static::createKernel();
$kernel->boot();
$this->_em = $kernel->getContainer()->get('doctrine.orm.entity_manager');
$this->_em->beginTransaction();
}
/**
* Rollback changes.
*/
public function tearDown()
{
$this->_em->rollback();
}
public function testSomething()
{
$user = $this->_em->getRepository('MyAppMyBundle:MyModel')->find(1);
}
Надеюсь, это поможет вам
Предполагается, что модели Symfony2 будут объектами домена, которые представляют модели домена в коде.
Объекты доменадолжны быть определены исключительно для реализации бизнеса поведение соответствующей концепции домена, а не определяться в соответствии с требованиями более конкретной технологической основы. - Доменный дизайн - Википедия, свободная энциклопедия
Объекты домена (и его тесты) не должны зависеть от API-интерфейсов Symfony2 и API-интерфейсов Doctrine, за исключением случаев, когда вы действительно хотите протестировать себя.
Написание тестов модулей Symfony2 не отличается от написания стандартных модульных тестов PHPUnit. - Symfony - Тестирование
Вы можете протестировать бизнес-логику (процессы, правила, поведение и т.д.), представленные в объектах домена с помощью PHPUnit (или Behat) и обычно test doubles.
namespace Ibw\JobeetBundle\Tests\Repository;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand;
use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand;
use Doctrine\Bundle\DoctrineBundle\Command\Proxy\CreateSchemaDoctrineCommand;
class CategoryRepositoryTest extends WebTestCase
{
private $em;
private $application;
public function setUp()
{
static::$kernel = static::createKernel();
static::$kernel->boot();
$this->application = new Application(static::$kernel);
// drop the database
$command = new DropDatabaseDoctrineCommand();
$this->application->add($command);
$input = new ArrayInput(array(
'command' => 'doctrine:database:drop',
'--force' => true
));
$command->run($input, new NullOutput());
// 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 = new CreateDatabaseDoctrineCommand();
$this->application->add($command);
$input = new ArrayInput(array(
'command' => 'doctrine:database:create',
));
$command->run($input, new NullOutput());
// create schema
$command = new CreateSchemaDoctrineCommand();
$this->application->add($command);
$input = new ArrayInput(array(
'command' => 'doctrine:schema:create',
));
$command->run($input, new NullOutput());
// 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());
}
public function testFunction()
{
// here you test save any object or test insert any object
}
protected function tearDown()
{
parent::tearDown();
$this->em->close();
}
}
как в этой ссылке: Jobeet Unit Test Tutorial объяснить, как тестировать сущность и репозиторий объектов