如何PHPUnit测试一般错误,如" undefined index"

时间:2018-03-13 13:41:05

标签: php phpunit

我们说我有这个非常基本的课程:

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]++;
    }
}

我将如何对可能的回归进行测试,从而产生"未定义的索引"错误被抛出?

只是使用不存在的plus()调用函数$counter就足够了吗?当一切都很好没有任何反应,但如果回归删除了array_key_exists()检查,例如,"未定义索引"会被抛出。

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

1 个答案:

答案 0 :(得分:1)

创建一个调用plus()的测试,其中包含foo之类的不存在的内容,如您所述。

虽然测试未发出undefined index通知并不是您正在测试的内容。这指定您的类包含数组中的所有计数器。这是您的课程的实施细节,您的测试不应该关心。

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

您的测试应该测试班级的行为。因此,对于不存在的计数器,您需要决定应该发生什么。抛出异常,记录消息或者根本不记录消息。