如何将additionalProvider与存储库函数一起使用?

时间:2015-09-21 16:59:48

标签: php symfony doctrine-orm phpunit

我正在尝试为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与存储库函数一起使用?如何?

谢谢!

1 个答案:

答案 0 :(得分:2)

dataProvider在之前执行设置方法。所以service变量尚未初始化。

因此dataprovider方法只能返回数据,您需要在测试方法中将调用移动到服务。

Here the paragraph of the doc

  

注意所有数据提供程序都在调用之前执行   setUpBeforeClass是静态方法,第一次调用setUp方法。   因此,您无法访问从中创建的任何变量   在数据提供者中。这是PHPUnit所必需的   能够计算测试总数。