【问题标题】:How to PHPUnit test for general errors like "undefined index"如何 PHPUnit 测试一般错误,如“未定义的索引”
【发布时间】:2018-03-14 01:26:39
【问题描述】:

假设我有这个非常基础的课程:

class MyClass {

    private $_counters = [
        'counter1' => 0,
    ];

    public function plus($counter) {
        $this->_counters[$counter]++;
    }

}

现在对代码进行了更改,以便在 $counter 不存在时它不会中断:

public function plus($counter) {
    if (array_key_exists($counter, $this->_counters)) {
        $this->_counters[$counter]++;
    }
}

我将如何测试这个可能导致抛出“未定义索引”错误的回归?

只需使用不存在的$counter 调用函数plus() 就足够了吗?当一切都好时,什么都不会发生,但如果回归删除了 array_key_exists() 检查,例如,“未定义索引”将被抛出。

我对单元测试很陌生,所以我错过了一种更好的方法来测试这种情况吗?在没有断言的情况下编写测试用例感觉有点奇怪。

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    创建一个调用 plus() 的测试,使用不存在的东西,如您所说的 foo

    虽然没有抛出undefined index 通知的测试并不是您真正要测试的内容。这指定您的类包含数组中的所有计数器。这是您的测试不应该关心的类的实现细节。

    您可以编写类,使每个计数器都是该类的属性。真的希望您决定在 plus 方法中使用不存在的计数器时应该发生什么。

    你的测试应该测试类的行为。因此,对于不存在的计数器,您需要决定应该发生什么。抛出异常、记录消息或什么都没有。

    【讨论】:

      猜你喜欢
      • 2013-07-19
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2013-07-17
      • 2010-11-14
      • 2021-05-12
      相关资源
      最近更新 更多