PHPUnit и Guard Clause, не 100% покрытие

У меня есть эта гвардия:

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

Решение

Это происходит потому, что вы не тестируете обе ветви функции, в вашем тестовом случае функция прерывается, когда вы выкидываете исключение, поэтому она технически не завершается. Вы проверили half функции, даже если это единственная логика там.

Если вы хотите 100% покрытие, вам нужно создать тест, где $this->collection[$key] установлено .
В этом случае я бы предложил изменить вашу функцию на что-то вроде

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

return true;
}

а затем создать еще один тест, который утверждает, что истина при вызове validateRemove() а также $this->collection[$key] установлено.

Мой пример — я не знаю, как вы используете этот кусок кода!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]