这是我写的一个测试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)
中的每个测试方法中调用以测试所讨论的特定引擎。但这种方法似乎打破了提供商的单元测试,而不是我不确定我应该做什么。
有什么想法吗?
答案 0 :(得分:1)
您应该使用静态方法setUpBeforeClass来创建$引擎,而不是实现构造函数。引擎必须存储在静态属性中。
https://phpunit.de/manual/current/en/fixtures.html#fixtures.sharing-fixture