使用phpunit对symfony服务类进行单元测试

pvi*_*hez 9 phpunit symfony

GenericHelper.php在目录中有一个基本类Foo/BarBundle/Helper

我将其注册为以下服务Foo/BarBundle/Resources/config/services.yml:

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

    services:
       generic_helper:
           class: %generic_helper.class%
Run Code Online (Sandbox Code Playgroud)

我可以通过执行以下操作在命令中访问它:

    $helper = $this->getContainer()->get('generic_helper');
Run Code Online (Sandbox Code Playgroud)

现在,我想用PHPUnit对该类进行单元测试; 我有以下代码(类似于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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

运行PHPUnit会导致以下错误:

    PHP Fatal error:  Class 'Foo\BarBundle\Helper\GenericHelper' not found in /DIR/src/Foo/BarBundle/Tests/Helper/GenericHelperTest.php on line 10
Run Code Online (Sandbox Code Playgroud)

对'GenericHelper'进行Grepping只会产生一些结果:

  • Class本身和Test类
  • services.yml文件
  • appDevDebugProjectContainer文件app/cache/dev/,包含所有服务获取者

问题:

  • Symfony是否阻止PHPUnit直接构建服务类?
  • 有没有办法在不创建Symfony容器然后访问服务的情况下执行此操作(如此处所示:通过单元测试访问Symfony 2容器?)?我的意思是,它仍然只是一个基础课......

pvi*_*hez 9

运行带有-c指向包含该phpunit.xml.dist文件的目录的标志的phpunit 解决了该问题.这样做包括bootstrap.php.cache必要的自动装载东西.