我有这个守卫:
protected function validateRemove($key)
{
if (!isset($this->collection[$key])) {
throw new CategoryCollectionBadItemException();
}
}
测试:
/**
* @test
* @expectedException InfluenceDecision\Domain\Exception\Category\CategoryCollectionBadItemException
*/
public function removeMethodMustThrowExceptionWithInvalidKey()
{
$this->categoryCollection->add(
new Category(
null,
'test category'
)
);
$this->categoryCollection->remove(1);
}
CategoryCollection删除方法调用validateRemove方法
该测试工作正常,但是覆盖率不是100%,因为该测试无法访问validateRemove方法的最后一行:
什么是合适的解决方案?
答案 0 :(得分:1)
之所以发生这种情况,是因为您没有同时测试函数的两个分支,在您的测试案例中,当您抛出异常时该函数会中断,因此它在技术上还没有完成。您已经测试了功能的half
,即使它是其中唯一的逻辑。
如果要100%覆盖,则需要在设置$this->collection[$key]
的地方创建测试。
在这种情况下,我建议将您的功能更改为类似
protected function validateRemove($key)
{
if (!isset($this->collection[$key])) {
throw new CategoryCollectionBadItemException();
}
return true;
}
,然后创建另一个测试,当您调用validateRemove()
并且$this->collection[$key]
被设置为 时,该测试为true。
我的例子就是我,因为我真的不知道如何使用这段代码!