2010-07-20 91 views
2

我有几个单元测试助手扩展方法,例如我也写过单元测试的IsNotEmpty(this string str)。这些测试的基本结构是我有一个测试,用于验证扩展方法是否通过并在“好”输入上返回预期结果,并验证是否在“坏”输入上引发了失败异常。例如,对于上述方法的测试失败可能是这样的:针对故意失败测试的NCover代码覆盖率结果

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

其中Fails是我写我自己的属性 - 基本上为[ExpectedException(typeof(AssertFailedException))]的代理。所以我明确预计上述测试中唯一的一个例外,因此,我是而不是期望该方法一直运行。

但是当我右键点击我的解决方案时,选择“Test with-> NCover”,在上述所有方法中,我得到的代码覆盖率小于100%,末尾大括号突出显示为红色。

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

**)对于所有那些会回复100%代码覆盖率没有必要的人:不,我并不特别担心无论如何都要维护100%的代码覆盖率。但是,在这些情况下,* do 问题的方法显示为不在列表中,并且我必须一直进入树中才能看到它只是它们。这就是我试图在这里得到的问题 - 一般不是100%的代码覆盖率。

回答

5

您是否正在运行调试版本?这可能是问题。 NCover在调试断点之外工作,Microsoft向每个方法的闭括号添加一个,以便在离开该方法之前它可以在那里执行。在发布模式下运行应该照顾那些右括号。

+0

好搭档!更改构建迁移到发布修复它=) – 2010-07-23 06:22:28

+0

我遇到了与dotCover相同的问题。 – heymega 2016-03-24 14:53:27

-1

不要担心100%的代码覆盖率。尽可能接近你的合理范围。

实现100%的代码覆盖率是浪费时间。

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

您可以拥有一套完整的测试,只覆盖70%的代码。

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

+0

我不*一般*担心100%的代码覆盖率,但它很烦人看到所有这些红色(或忽略 - 是的,我知道关于该选项)的事情,只是因为NCover不会过去测试方法的最后一个大括号。 – 2010-07-20 19:38:33

+0

有关我的推理的更多详细信息,请参阅我的编辑。 – 2010-07-20 19:40:55

+0

@Tomas Lycken,是啊,这很烦人,这就是为什么我不再检查我的代码覆盖率。我试图遵循TDD,知道我的所有代码都会被覆盖,无论这些工具报告什么。 – CaffGeek 2010-07-20 19:46:51

相关问题