2

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

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

我自己写的属性在哪里Fails- 基本上是[ExpectedException(typeof(AssertFailedException))]. 因此,我明确希望在上述测试的唯一行上抛出异常,因此,我希望该方法一直运行。

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

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

**) 对于那些回答不需要 100% 代码覆盖率的人:不,我并不特别担心不惜一切代价保持 100% 代码覆盖率。但是,在这些情况下,确实重要的方法不会出现在列表中,我必须一直深入到树中才能看到它只是它们。这就是我要解决的问题——一般来说不是 100% 的代码覆盖率。

4

2 回答 2

5

您正在运行调试版本吗?这大概就是问题所在。NCover 使用调试断点,Microsoft 在每个方法的右括号中添加一个,这样它就可以在离开方法之前进入那里。在发布模式下运行应该会为您处理这些右括号。

于 2010-07-22T00:00:41.247 回答
-1

不用担心 100% 的代码覆盖率。尽可能靠近。

达到 100% 的代码覆盖率是浪费时间。

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

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

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

于 2010-07-20T19:31:37.850 回答