Ho una classe base GenericHelper.php
nella directory Foo/BarBundle/Helper
Unità testare una classe di servizio symfony con PHPUnit
ho registrato come servizio in Foo/BarBundle/Resources/config/services.yml
:
parameters:
generic_helper.class: Foo\BarBundle\Helper\GenericHelper
services:
generic_helper:
class: %generic_helper.class%
e io sono in grado di accedervi in un il comando nel modo seguente:
$helper = $this->getContainer()->get('generic_helper');
Ora, vorrei test che classe con PHPUnit unità; Ho il seguente codice (simile 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);
}
}
Esecuzione risultati PHPUnit il seguente errore:
PHP Fatal error: Class 'Foo\BarBundle\Helper\GenericHelper' not found in /DIR/src/Foo/BarBundle/Tests/Helper/GenericHelperTest.php on line 10
grep per 'GenericHelper' produce solo pochi risultati:
- la classe stessa e la classe di test
- il file services.yml
appDevDebugProjectContainer
file inapp/cache/dev/
, che hanno tutti i getter servizio
Question (s):
- symfony impediscono PHPUnit da costruire direttamente una classe di servizio?
- C'è un modo per farlo senza creare un contenitore Symfony quindi accedere al servizio (come fatto qui: Access Symfony 2 container via Unit test?)? Voglio dire, è ancora solo una classe di base ...
Dovrebbe funzionare, probabilmente hai qualcosa che non va con il caricamento automatico delle tue classi. Potresti pubblicare il tuo file 'phpunit.xml'? – Matt
@Matt Non ho modificato il file 'phpunit.xml.dist' fornito con symfony, ma il tuo commento mi è stato di aiuto a prescindere - l'esecuzione di phpunit con' -c app/'(directory con il file dist) funzionava. Immagino che abbia a che fare con il file di bootstrap specificato all'interno? Comunque, grazie! – pvilchez
Sì, perché 'bootstrap.php.cache' includerà il materiale di caricamento automatico. Dovresti pubblicare una risposta alla tua domanda e accettarla quando puoi (penso che devi aspettare qualcosa come due giorni). – Matt