NCover代码覆盖率导致故意测试失败

时间:2010-07-20 19:28:46

标签: c# visual-studio code-coverage ncover

我有几个单元测试助手扩展方法,例如IsNotEmpty(this string str),我也编写了单元测试。这些测试的基本结构是我有一个测试,它验证扩展方法是否通过并在“良好”输入上返回预期结果,以及验证在“坏”输入上抛出失败异常的测试。例如,上述方法的失败测试可能如下所示:

[TestMethod, Fails]
public void IsNotEmpty_Fails_On_Empty_String()
{
    "".IsNotEmpty();
}

其中Fails是我自己编写的属性 - 基本上是[ExpectedException(typeof(AssertFailedException))]的代理。所以我显然期望异常被抛出在上面测试的唯一一行,因此,我期望该方法一直运行。

但是当我右键单击我的解决方案时,选择“使用> NCover测试”,我在上述所有方法上获得的代码覆盖率低于100%,结尾括号突出显示为红色。

为什么NCover抱怨我的测试方法没有完成,当我说它不会?

**)对于那些将回复100%代码覆盖率的人而言:不,我并不特别担心不惜一切代价保持100%的代码覆盖率。但是,在这些情况下,* do 重要的方法显示为未列在列表中,我必须一直进入树中才能看到它只是它们。这就是问题我试图在这里 - 一般不是100%的代码覆盖率。

2 个答案:

答案 0 :(得分:5)

您是否正在运行调试版本?这可能就是问题所在。 NCover在调试断点之外工作,并且Microsoft在每个方法的结束括号中添加一个,以便在离开方法之前可以执行此操作。在发布模式下运行应该为您处理那些关闭括号。

答案 1 :(得分:-1)

不要担心100%的代码覆盖率。尽量让你尽可能接近。

获得100%的代码覆盖率是浪费时间。

重要的是,您对涵盖需要涵盖的代码的测试充满信心。

您可以拥有一组仅包含70%代码的可靠测试。

您最好的测试可能只涵盖几行,但它们可以防止大多数错误。它们是'边缘案例测试'。没有它们的那些,其他测试是无用的。您的整个测试套件都是无用的,因为它们是测试错误的案例,如果它们不存在,通常会继续重新引入代码库。