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

标签 php unit-testing phpunit dataprovider

我有以下测试用例:

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/

相关文章:

php - 计算数据库中的行数

php - 可维护的 Web Widget

php - php 或 zend 中国际电话号码验证的正则表达式是什么?

c# - 为什么这个 DateTime 解析总是失败?

php - 尝试运行新单元测试时出现 "ParsePI: PI php never end"

Symfony3+PHP单元。如何禁用控制台中的调试日志?

javascript - php到node.js ajax发送没有给出响应

ruby - 否则没有救援是没用的

java - openejb 嵌入式容器找不到 persistence.xml

PHP 静态方法/单例模式