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

时间:2012-03-08 16:20:22

标签: symfony phpunit

我在目录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%

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

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

现在,我想用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);
        }
    }

运行PHPUnit会导致以下错误:

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

为'GenericHelper'加注只会产生一些结果:

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

问题

  • Symfony是否阻止PHPUnit直接构建服务类?
  • 有没有办法在不创建Symfony Container然后访问服务的情况下执行此操作(如此处所示:Access Symfony 2 container via Unit test?)?我的意思是,它仍然只是一个基本类...

1 个答案:

答案 0 :(得分:9)

运行带有-c标志的phpunit指向包含phpunit.xml.dist文件的目录解决了这个问题。这样做包括bootstrap.php.cache,因此需要自动加载内容。