我正在尝试为Symfony 2.7项目配置测试类。我正在测试一个使用doctrine来连接数据库的控制器。
我终于设法扩展KernelTestCase以避免这个致命错误:调用成员函数" X"在一个非对象上。但问题出在这里:我正在试图通过使用additionProvider来命令我的代码并将5个测试函数简化为一个:
public function additionProvider()
{
$first=$this->service->getTranslation("","en");
return array
(
'original not created' =>array($first,"")
);
}
我希望像以下一样使用它:
/**
* @dataProvider additionProvider
*/
public function testGetTranslation($expected, $actual)
{
$this->assertEquals($expected, $actual);
}
这是我的setUp():
public function setUp()
{
self::bootKernel();
$this->em = static::$kernel->getContainer()
->get('doctrine')
->getManager()
;
$this->service = new \DictionaryBundle\Controller\UtilController($this->em);
}
我尝试添加这样的第一个测试,然后再次出现错误,就好像它无法访问存储库一样。那么,是否可以将addittionProviders与存储库函数一起使用?如何?
谢谢!
答案 0 :(得分:2)
dataProvider在之前执行设置方法。所以service
变量尚未初始化。
因此dataprovider方法只能返回数据,您需要在测试方法中将调用移动到服务。
Here the paragraph of the doc:
注意所有数据提供程序都在调用之前执行 setUpBeforeClass是静态方法,第一次调用setUp方法。 因此,您无法访问从中创建的任何变量 在数据提供者中。这是PHPUnit所必需的 能够计算测试总数。