我有一个这样的代码块(类/属性名称已更改为符合公司指南):
if (output.ExecutionStatus == RuleExecutionStatus.Success &&
!obj.ListOfObjs.Cast<ConcreteType>().Any(p => p.Id == o.Id))
{
obj.AddConcreteType(output.ConcreteObj);
}
在添加&& !obj.ListOfObjs.Cast<ConcreteType>().Any(p => p.Id == o.Id)
之前,此行已100%覆盖。我在下面添加了一个名为Test 2
的测试。
因此,在添加新测试后,该块几乎100%覆盖;但我无法弄清楚什么没有被覆盖。它表示1
块未被覆盖。现在执行的测试具有以下属性:
0
中有ListOfObjs
,无匹配,成功添加。2
中有ListOfObjs
,1
上有Id
个匹配,不添加。我尝试过什么
ListOfObjs
中没有匹配项1的测试,成功添加。我想也许问题可能是因为它没有涵盖Any
与0
相匹配的情况。答案 0 :(得分:1)
听起来你还没有测试执行状态是不是成功 - 换句话说,&&
表达式的第一个操作数是{ {1}}适用于所有测试,因此您不会检查它是否相关。
(一般情况下,如果您可以在没有任何测试中断的情况下删除某些生产代码,那么这是一个不好的迹象 - 或者它表明它不起作用,例如优化。)