2012-01-23 19 views

Respuesta

82

La compatibilidad ahora está integrada en Symfony. Ver http://symfony.com/doc/master/cookbook/testing/doctrine.html

Esto es lo que podría hacer:

namespace AppBundle\Tests; 

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; 

class MyDatabaseTest extends KernelTestCase 
{ 
    private $container; 

    public function setUp() 
    { 
     self::bootKernel(); 

     $this->container = self::$kernel->getContainer(); 
    } 
} 

Por un poco técnica más moderna y reutilizable ver https://gist.github.com/jakzal/a24467c2e57d835dcb65.

Tenga en cuenta que el uso del contenedor en la unidad prueba los olores. En general, significa que sus clases dependen del contenedor completo (todo el mundo) y eso no es bueno. Deberías limitar tus dependencias y burlarlas.

+23

1 por mencionar el olor del código – gilden

+9

probablemente mejor: http://symfony.com/doc/master/cookbook/testing/doctrine.html – binarious

12

Se puede usar esta, en su función de establecer

protected $client; 
protected $em; 

/** 
* PHP UNIT SETUP FOR MEMORY USAGE 
* @SuppressWarnings(PHPMD.UnusedLocalVariable) crawler set instance for test. 
*/ 
public function setUp() 
{ 
    $this->client = static::createClient(array(
      'environment' => 'test', 
    ), 
     array(
      'HTTP_HOST' => 'host.tst', 
      'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0', 
    )); 

    static::$kernel = static::createKernel(); 
    static::$kernel->boot(); 
    $this->em = static::$kernel->getContainer() 
           ->get('doctrine') 
           ->getManager(); 
    $crawler = $this->client->followRedirects(); 
} 

No se olvide de configurar su función de desmontaje

protected function tearDown() 
{ 
    $this->em->close(); 
    unset($this->client, $this->em,); 
} 
+0

Este comentario debe ser seleccionado. ¡Gracias Señor! – DanR

-1

Por varias configuraciones diferentes también usa lastzero/test-tools paquete.

en ella se establece contenedor para usted y está listo para usar:

use TestTools\TestCase\UnitTestCase; 

class FooTest extends UnitTestCase 
{ 
    protected $foo; 

    public function setUp() 
    { 
     $this->foo = $this->get('foo'); 
    } 

    public function testBar() 
    { 
     $result = $this->foo->bar('Pi', 2); 
     $this->assertEquals(3.14, $result); 
    } 
} 
Cuestiones relacionadas