How to Test Doctrine Repositories
How to Test Doctrine Repositories¶
Unit testing Doctrine repositories in a Symfony project is not recommended. When you’re dealing with a repository, you’re really dealing with something that’s meant to be tested against a real database connection.
Fortunately, you can easily test your queries against a real database, as described below.
Functional Testing¶
If you need to actually execute a query, you will need to boot the kernel
to get a valid connection. In this case, you’ll extend the KernelTestCase
,
which makes all of this quite easy:
// tests/AppBundle/Repository/ProductRepositoryTest.php
namespace Tests\AppBundle\Repository;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class ProductRepositoryTest extends KernelTestCase
{
/**
* @var \Doctrine\ORM\EntityManager
*/
private $em;
/**
* {@inheritDoc}
*/
protected function setUp()
{
self::bootKernel();
$this->em = static::$kernel->getContainer()
->get('doctrine')
->getManager();
}
public function testSearchByCategoryName()
{
$products = $this->em
->getRepository('AppBundle:Product')
->searchByCategoryName('foo')
;
$this->assertCount(1, $products);
}
/**
* {@inheritDoc}
*/
protected function tearDown()
{
parent::tearDown();
$this->em->close();
$this->em = null; // avoid memory leaks
}
}
This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.