有没有办法获得100%的分支机构覆盖率?

时间:2019-04-11 13:46:40

标签: c# unit-testing code-coverage

我的任务是用测试覆盖整个解决方案,并达到100%的分支和序列覆盖率。

我使用带if语句的方法:

public string ConvertToOrder(string cartCode)
{  
    var cart = CartService.GetCartByCode(cartCode);
    if (cart == null || cart.ItemCount == 0)
    {
        throw new Exception("CartCode does not exist");
    }
}

我只能检查4种情况中的3种。
1.当cart不是nullitemCount == 0
2.当cart不是nullitemCount != 0
3.when cartnullitemCount == 0
时 4.Forth场景不合理,因为我无法在测试中将项目添加到null对象中。

是否有任何工具可以支持这种情况,并且可以显示100%的覆盖率?或以任何方式涵盖第四种情况?

2 个答案:

答案 0 :(得分:1)

这里没有第四种情况。以下三种情况将完全覆盖您的代码:

  1. cart不是nullitemCount == 0
  2. cart不是nullitemCount != 0
  3. cartnull

C#(与许多编程语言一样)将评估第一个操作数cart == null,如果是,则不评估第二个操作数。仅仅是因为一旦第一个操作数为真,我们就知道答案为真。请参阅Microsoft的documentation,其中涵盖了||运算符的这种行为。

您的问题暗含一种工具告诉您在前三种情况下您没有100%的覆盖率。如果是这样,那么值得研究为什么该工具不相信您具有100%的覆盖率。

答案 1 :(得分:1)

免责声明:我在Typemock工作-单元测试公司 解决方案覆盖工具不知道何时忽略这些不可能达到的方案。 您现在必须忽略这些情况。 为了使查找这些困难的案例更加容易,我们建议使用HTML导出,在该导出中,您可以查看if语句的执行次数并手动计算coverage,以确保您不会错过任何可能的情况