簡體   English   中英

PHPUnit和Guard子句,而不是100%的覆蓋率

[英]PHPUnit and Guard Clause, not 100% coverage

我有這個衛隊:

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方法的最后一行:

在此處輸入圖片說明

什么是合適的解決方案?

發生這種情況是因為您沒有同時測試函數的兩個分支,在測試用例中,當您引發異常時函數會中斷,因此從技術上講還沒有完成。 您已經測試了half的功能,即使它只是其中的唯一邏輯。

如果你想100%的覆蓋率,則需要建立在那里進行測試$this->collection[$key] 設置 在這種情況下,我建議將您的功能更改為

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

    return true;
}

然后創建另一個測試,當你調用斷言真validateRemove()$this->collection[$key] 設置

我的例子就是一個例子,因為我真的不知道如何使用這段代碼!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM