PHPUnit и Guard Clause, не 100% покрытие - PullRequest
0 голосов
/ 17 октября 2018

У меня есть этот Guard:

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:

enter image description here

Какое лучшее решение?

1 Ответ

0 голосов
/ 17 октября 2018

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

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

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

    return true;
}

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

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

...