Correr pruebas unitarias en repositorios Doctrine de un proyecto Symfony no es recomendable. Cuando estás tratando con un repositorio, en realidad estás tratando con algo que está destinado a ser probado contra una conexión de base de datos real.
Afortunadamente, fácilmente puedes probar tus consultas contra una base de datos real, como se describe a continuación.
Si realmente necesitas ejecutar una consulta, tendrás que arrancar el núcleo para conseguir una conexión válida. En este caso, debes extender a WebTestCase, el cual hace todo esto muy fácil:
// src/Acme/StoreBundle/Tests/Entity/ProductRepositoryFunctionalTest.php
namespace Acme\StoreBundle\Tests\Entity;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ProductRepositoryFunctionalTest extends WebTestCase
{
/**
* @var \Doctrine\ORM\EntityManager
*/
private $em;
/**
* {@inheritDoc}
*/
public function setUp()
{
static::$kernel = static::createKernel();
static::$kernel->boot();
$this->em = static::$kernel->getContainer()
->get('doctrine')
->getManager()
;
}
public function testSearchByCategoryName()
{
$products = $this->em
->getRepository('AcmeStoreBundle:Product')
->searchByCategoryName('foo')
;
$this->assertCount(1, $products);
}
/**
* {@inheritDoc}
*/
protected function tearDown()
{
parent::tearDown();
$this->em->close();
}
}