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 inapp/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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausführen von phpunit mit der
-c
Flagge zeigt auf das Verzeichnis, das diephpunit.xml.dist
- Datei das Problem gelöst. Dies zu tun beinhaltetbootstrap.php.cache
und daher die autoloading-Zeug notwendig.