【发布时间】: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 文件
-
appDevDebugProjectContainerapp/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将包含自动加载的内容。您应该发布您的问题的答案并尽可能接受(我认为您必须等待两天)。