单元测试中的代码覆盖率

时间:2009-03-19 17:33:57

标签: .net unit-testing code-coverage

这是关于.NET库(DLL)。

测量单元测试用例所涵盖的代码的选项有哪些?实际上值得努力(测量代码覆盖率)吗?我想要覆盖70%的代码可能太容易了,几乎不可能超过90%。

[编辑] 另一个有趣的问题(由“E Rolnicki”提出)是: 什么被认为是合理的覆盖率?

6 个答案:

答案 0 :(得分:9)

NCover(商业和开源的同名)和Visual Studio中的代码覆盖工具几乎是MS世界的主要工具。

代码覆盖率是一个反向指标。它并没有真正向您展示哪些代码已经过充分测试。就像尼克提到的那样,你可以进行覆盖测试,但实际测试不多。代码覆盖率会告诉您代码的哪个区域绝对没有测试。从那里,您可以决定是否有必要为此代码编写测试。

一般情况下,我认为您应该进行代码覆盖,因为它不需要花费太多精力进行设置,它至少可以为您提供有关代码的更多信息。

我同意获得最后一部分代码可能是最难的,并且可能有一点,它的投资回报率是没有意义的。

答案 1 :(得分:3)

NCover将有助于向您展示报道。覆盖范围非常有用,不幸的是它显然可以被游戏化。如果你有不好的开发人员只是为了让年龄增长而覆盖代码,是的,它最终将是无用的并隐藏未覆盖的区域。一旦你解雇了这些人,你就可以修复它并回到有用的信息。设定无法实现的覆盖目标是获得不良覆盖率的可靠方法。

答案 2 :(得分:3)

如果你正在进行测试驱动开发,你的代码应该至少达到70%而不用尝试。有些区域你不能或没有意义进行测试覆盖,那就是NCover的NoCoverage属性派上用场了(你可以将类标记排除在代码覆盖范围之外)。

不应该虔诚地遵守代码覆盖范围,它应该只是一种有用的方式来提示您在测试时遗漏的区域。它应该是你的朋友,而不是像纳粹一样!

答案 3 :(得分:3)

在查看代码覆盖时,需要考虑两件事。

  1. 代码覆盖率是一种收益递减的战斗:超过某一点,每增加一个百分比产生的价值就会减少。一些代码(如核心库)应该100%覆盖,而UI代码/交互可能很难覆盖。
  2. 代码覆盖率是一种欺骗性的指标:100%的代码覆盖率并不等同于完全测试的应用程序。

以此片段为例:

if (a == 2)
{
    do_A_Stuff();
}

if (b == 3)
{
    do_B_Stuff();
}

运行a = 2的测试和b = 3的第二次测试。这是100%的代码覆盖率。但是当测试a = 2&时会发生什么? b = 3?这些是“可变关系”,可能导致覆盖率指标过度自信。

答案 4 :(得分:1)

我没有亲自使用它,但是我的一位同事在nCover(http://www.ncover.com/)发誓。

就覆盖率而言,至少在Ruby中,70%是容易的,90%是可行的,100%很少是可能的。

答案 5 :(得分:1)

Visual Studio Team System Developer Edition包含代码覆盖率。运行单元测试时可以包含此项。

打开.testrunco​​nfig并选择要为其提供数据的程序集。