我们说我有这个非常基本的课程:
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()
检查,例如,"未定义索引"会被抛出。
我对单元测试很陌生,所以我错过了测试这种情况的更好方法吗?在没有断言的情况下编写测试用例感觉有点奇怪。
答案 0 :(得分:1)
创建一个调用plus()
的测试,其中包含foo
之类的不存在的内容,如您所述。
虽然测试未发出undefined index
通知并不是您正在测试的内容。这指定您的类包含数组中的所有计数器。这是您的课程的实施细节,您的测试不应该关心。
您可以编写类,以便每个计数器都是该类的属性。真的希望你想要决定在plus
方法中使用不存在的计数器时会发生什么。
您的测试应该测试班级的行为。因此,对于不存在的计数器,您需要决定应该发生什么。抛出异常,记录消息或者根本不记录消息。