gpt4 book ai didi

php - PHPUnit 和数据提供者的问题

转载 作者:IT王子 更新时间:2023-10-28 23:57:32 25 4
gpt4 key购买 nike

我有以下测试用例:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com