Я пытался протестировать модель в проекте 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) и обычно тестовые двойники.
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 Учебное пособие по модульному тестированию объясняет, как тестировать сущность и репозиторий сущностей.