构造函数用提供者打破phpunit测试

时间:2014-10-15 11:18:32

标签: php unit-testing phpunit

这是我写的一个测试PHPUnit测试:

<?php
class MyTest extends PHPUnit_Framework_TestCase
{
    public function __construct()
    {
        echo "starting tests\r\n";

        parent::__construct();
    }

    public function provider()
    {
        return array(array('test'));
    }

    /**
    * @dataProvider provider
    */
    public function testProvider($var)
    {
        $this->assertEquals($var, $var);
        //exit($var);
    }
}

当我运行它时,我得到以下内容:

There was 1 error:

1) MyTest::testProvider
Missing argument 1 for MyTest::testProvider()

/home/myname/test.php:19

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.

我的问题是......为什么?我能做些什么呢?

在我写的实际单元测试中(以上只是一个证明问题的测试)我正在测试一个有几个不同后端引擎的类。我有一个带有一堆测试用例的抽象类和一个名为$ engine的受保护类变量。然后我有一堆类扩展这个抽象类并在构造函数中设置$ engine。然后,在抽象方法$obj->setEngine($this->engine)中的每个测试方法中调用以测试所讨论的特定引擎。但这种方法似乎打破了提供商的单元测试,而不是我不确定我应该做什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您应该使用静态方法setUpBeforeClass来创建$引擎,而不是实现构造函数。引擎必须存储在静态属性中。

https://phpunit.de/manual/current/en/fixtures.html#fixtures.sharing-fixture