我的任务是用测试覆盖整个解决方案,并达到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
不是null
和itemCount == 0
时
2.当cart
不是null
和itemCount != 0
时
3.when cart
是null
和itemCount == 0
时
4.Forth场景不合理,因为我无法在测试中将项目添加到null
对象中。
是否有任何工具可以支持这种情况,并且可以显示100%的覆盖率?或以任何方式涵盖第四种情况?
答案 0 :(得分:1)
这里没有第四种情况。以下三种情况将完全覆盖您的代码:
cart
不是null
和itemCount == 0
cart
不是null
和itemCount != 0
cart
是null
C#(与许多编程语言一样)将评估第一个操作数cart == null
,如果是,则不评估第二个操作数。仅仅是因为一旦第一个操作数为真,我们就知道答案为真。请参阅Microsoft的documentation,其中涵盖了||
运算符的这种行为。
您的问题暗含一种工具告诉您在前三种情况下您没有100%的覆盖率。如果是这样,那么值得研究为什么该工具不相信您具有100%的覆盖率。
答案 1 :(得分:1)
免责声明:我在Typemock工作-单元测试公司 解决方案覆盖工具不知道何时忽略这些不可能达到的方案。 您现在必须忽略这些情况。 为了使查找这些困难的案例更加容易,我们建议使用HTML导出,在该导出中,您可以查看if语句的执行次数并手动计算coverage,以确保您不会错过任何可能的情况