我有以下测试用例:
include_once('../Logger.php');
class LoggerTest extends PHPUnit_Framework_TestCase {
public function providerLogger() {
return new Logger;
}
/**
* @dataProvider providerLogger
*/
public function testAddStream($logger) {
$this->assertTrue(false);
}
}
当我在 PHPUnit 中运行它时,我得到:
PHPUnit 3.4.14 by Sebastian Bergmann.
..........
Time: 0 seconds, Memory: 5.75Mb
OK (1 tests, 0 assertions)
测试应该会失败,但实际上并没有。我试过:
public function providerLogger() {
return array(new Logger);
}
但是我得到:
The data provider specified for LoggerTest::testAddStream is invalid.
我尝试将其声明为static
(如手册所述),但仍然没有区别。
我记得它以前以类似的方式工作,但我可能是错的。我错过了什么?
预先感谢您的帮助。
PHPUnit 3.4.14(取自 PEAR)在 PHP 5.3.3 上
最佳答案
次要更新:从 3.2 版(或附近版本)开始,可以使用实例方法作为提供者。看看评论
提供者必须看起来像这样。
public static function providerLogger() {
return array(
array(new Logger)
);
}
首先:如果您使用低于 3.3 的 phpunit 版本,该方法必须是static。
数组 很重要。这并不难理解。外部数组对于测试应调用的每次迭代都有一个值。这里的测试只被调用一次。内部数组是调用测试的参数(按顺序)。您的测试只需要一个参数,因此内部数组总是只需要一个值。另一个小例子
public static function addTestProvider () {
return array(
/* First + Second = third? */
array(1,4,5),
array(3,3,6),
array(5,5,6)
);
}
public function testAdd ($a, $b, $result) {
$this->assertEquals($result, $a + $b);
}
这里 testAdd 被执行了 3 次,每个二级 array 执行一次,它将接收来自内部 array 的值.您可能会注意到,测试将失败并向您提供一条消息,其中数据集的迭代(此处为 #3,因为 5+5 不是 6 ;))断言失败。
关于php - PHPUnit 和数据提供者的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4262309/