Unit-Tests eine symfony-service-Klasse mit phpunit

Ich habe eine einfache Klasse GenericHelper.php im Verzeichnis Foo/BarBundle/Helper

Registrierte ich es als einen Dienst in Foo/BarBundle/Resources/config/services.yml:

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

    services:
       generic_helper:
           class: %generic_helper.class%

und ich bin in der Lage, es in einen Befehl, indem Sie Folgendes tun:

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

Nun, ich würde gern unit-test-Klasse mit PHPUnit; ich habe den folgenden code (ähnlich 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);
        }
    }

Ausführen von PHPUnit Ergebnisse in die folgende Fehlermeldung:

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

Grepping für 'GenericHelper' nur Ausbeuten von ein paar Ergebnisse:

  • die Klasse selbst und die Test-Klasse
  • der Dienstleistungen.yml-Datei
  • appDevDebugProjectContainer Dateien in app/cache/dev/, die haben alle service-Getter

Frage(N):

  • Hat Symfony verhindern, dass PHPUnit direkt den Bau einer service-Klasse?
  • Gibt es eine Möglichkeit, dies zu tun, ohne Erstellung eines Symfony-Container dann Zugriff auf den service (so wie hier: Zugang Symfony 2 container via Unit-test?)? Ich meine, es ist nur noch eine einfache Klasse...
  • Es sollte funktionieren, haben Sie wahrscheinlich etwas falsch mit dem autoloading von Klassen. Könntest du deinen post phpunit.xml - Datei?
  • Ich habe nicht geändert, die phpunit.xml.dist - Datei, die kam mit symfony, aber dein Kommentar hat mir geholfen, aus unabhängig - ausführen von phpunit mit -c app/ (Verzeichnis mit der dist-Datei) gearbeitet. Ich denke, es hat zu tun mit der angegebenen bootstrap-Datei? Anyways, vielen Dank!
  • Ja, weil bootstrap.php.cache gehören die autoloading-Zeug. Sie sollte die post eine Antwort auf Ihre Frage und akzeptieren Sie es, wenn Sie können (ich denke, du musst warten, so etwas wie zwei Tage).
  • Ok, werde das tun. Nochmals vielen Dank.
InformationsquelleAutor pvilchez | 2012-03-08
Schreibe einen Kommentar