0

我有这个警卫:

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 remove 方法调用 validateRemove 方法

测试工作正常,但覆盖率不是 100%,因为测试无法访问 validateRemove 方法的最后一行:

在此处输入图像描述

什么是适当的解决方案?

4

1 回答 1

1

发生这种情况是因为您没有测试函数的两个分支,在您的测试用例中,当您抛出异常时函数会中断,因此它在技术上并未完成。您已经测试half了该功能,即使它是其中唯一的逻辑。

如果你想要 100% 的覆盖率,你需要创建一个测试 where $this->collection[$key] is set。在这种情况下,我建议将您的功能更改为

protected function validateRemove($key)
{
    if (!isset($this->collection[$key])) {
        throw new CategoryCollectionBadItemException();
    }

    return true;
}

然后创建另一个测试,该测试在您调用validateRemove()$this->collection[$key] 设置为true 时断言。

我的就是一个例子,因为我真的不知道你如何使用那段代码!

于 2018-10-17T20:21:16.250 回答