2012-03-08 4 views
9

Ho una classe base GenericHelper.php nella directory Foo/BarBundle/HelperUnità 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 in app/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 ...
+0

Dovrebbe funzionare, probabilmente hai qualcosa che non va con il caricamento automatico delle tue classi. Potresti pubblicare il tuo file 'phpunit.xml'? – Matt

+0

@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

+0

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

risposta

9

phpunit con la bandierina -c che punta alla directory contenente il file phpunit.xml.dist Esecuzione risolto il problema. Ciò include bootstrap.php.cache e quindi il materiale di caricamento automatico necessario.