【问题标题】:Unit testing a symfony service class with phpunit使用 phpunit 对 symfony 服务类进行单元测试
【发布时间】:2012-03-26 03:13:09
【问题描述】:

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

我在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”只会产生一些结果:

  • 类本身和测试类
  • services.yml 文件
  • appDevDebugProjectContainer app/cache/dev/ 中的文件,其中包含所有服务获取器

问题

  • Symfony 会阻止 PHPUnit 直接构建服务类吗?
  • 有没有办法在不创建 Symfony 容器然后访问服务的情况下做到这一点(如这里所做的:Access Symfony 2 container via Unit test?)?我的意思是,它仍然只是一个基础课程......

【问题讨论】:

  • 它应该可以工作,你的类的自动加载可能有问题。你能发布你的phpunit.xml 文件吗?
  • @Matt 我没有修改 symfony 附带的 phpunit.xml.dist 文件,但无论如何你的评论都帮了我的忙 - 使用 -c app/ (包含 dist 文件的目录)运行 phpunit 有效。我猜这与其中指定的引导文件有关?无论如何,谢谢!
  • 是的,因为bootstrap.php.cache 将包含自动加载的内容。您应该发布您的问题的答案并尽可能接受(我认为您必须等待两天)。

标签: symfony phpunit


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2013-09-13
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多