tengo una clase básica GenericHelper.php
en el directorio Foo/BarBundle/Helper
Unidad 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 enapp/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 ...
Debería funcionar, probablemente tenga algún problema con la carga automática de sus clases. ¿Podría publicar su archivo 'phpunit.xml'? – Matt
@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
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