如何确定这里没有涉及哪个块?

时间:2014-05-01 13:52:14

标签: c# .net unit-testing

我有一个这样的代码块(类/属性名称已更改为符合公司指南):

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块未被覆盖。现在执行的测试具有以下属性:

  • 测试1:返回成功,0中有ListOfObjs,无匹配,成功添加。
  • 测试2:返回成功,2中有ListOfObjs1上有Id个匹配,添加。

我尝试过什么

  • 添加ListOfObjs中没有匹配项1的测试,成功添加。我想也许问题可能是因为它没有涵盖Any0相匹配的情况。

1 个答案:

答案 0 :(得分:1)

听起来你还没有测试执行状态是不是成功 - 换句话说,&&表达式的第一个操作数是{ {1}}适用于所有测试,因此您不会检查它是否相关。

(一般情况下,如果您可以在没有任何测试中断的情况下删除某些生产代码,那么这是一个不好的迹象 - 或者它表明它不起作用,例如优化。)