2012-03-08 9 views
9

tengo una clase básica GenericHelper.php en el directorio Foo/BarBundle/HelperUnidad de prueba de una clase de servicio con Symfony PHPUnit

que lo registró como un servicio en Foo/BarBundle/Resources/config/services.yml:

parameters: 
     generic_helper.class: Foo\BarBundle\Helper\GenericHelper 

    services: 
     generic_helper: 
      class: %generic_helper.class% 

y yo soy capaz de acceder a él en una comando de la siguiente manera:

$helper = $this->getContainer()->get('generic_helper'); 

Ahora, me gustaría que la prueba de clase con PHPUnit unidad; Tengo el siguiente código (similar a http://symfony.com/doc/2.0/book/testing.html#unit-tests):

namespace Foo\BarBundle\Tests\Helper; 

    use Foo\BarBundle\Helper\GenericHelper; 

    class GenericHelperTest extends \PHPUnit_Framework_TestCase { 

     public function testSomeMethod() { 
      $helper = new GenericHelper(); //line 10 
      $this->assertEquals($helper->someMethod(), SOME_RESULT); 
     } 
    } 

Correr resultados PHPUnit en el siguiente error:

PHP Fatal error: Class 'Foo\BarBundle\Helper\GenericHelper' not found in /DIR/src/Foo/BarBundle/Tests/Helper/GenericHelperTest.php on line 10 

grepping para 'GenericHelper' sólo produce unos resultados:

  • la clase en sí y la clase de prueba
  • el archivo services.yml
  • appDevDebugProjectContainer archivos en app/cache/dev/, que tienen todos los captadores de servicios

Pregunta (s):

  • impide Symfony PHPUnit de construir directamente una clase de servicio?
  • ¿Hay alguna manera de hacerlo sin crear un contenedor de Symfony y luego acceder al servicio (como se hace aquí: Access Symfony 2 container via Unit test?)? Es decir, todavía es sólo una clase básica ...
+0

Debería funcionar, probablemente tenga algún problema con la carga automática de sus clases. ¿Podría publicar su archivo 'phpunit.xml'? – Matt

+0

@Matt No he modificado el archivo 'phpunit.xml.dist' que viene con Symfony, pero su comentario me ayudó independientemente: se ejecutó phpunit con' -c app/'(directorio con el archivo dist). Supongo que tiene que ver con el archivo bootstrap especificado dentro? De todos modos, gracias! – pvilchez

+0

Sí, porque 'bootstrap.php.cache' incluirá las cosas de carga automática. Debe publicar una respuesta a su pregunta y aceptarla cuando pueda (creo que debe esperar algo así como dos días). – Matt

Respuesta

9

Correr PHPUnit con el señalador -c bandera al directorio que contiene el archivo phpunit.xml.dist resolvió el problema. Hacer esto incluye bootstrap.php.cache y, por lo tanto, las cosas de carga automática necesarias.

Cuestiones relacionadas