【问题标题】:Code coverage in unit testing单元测试中的代码覆盖率
【发布时间】:2010-10-14 08:58:33
【问题描述】:

这是关于 .NET 库 (DLL) 的。

有哪些选项可用于衡量单元测试用例所涵盖的代码?它真的值得付出努力(测量代码覆盖率)吗?我想知道覆盖 70% 的代码可能太容易了,而超过 90% 几乎不可能。

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

【问题讨论】:

    标签: .net unit-testing code-coverage


    【解决方案1】:

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

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

    总的来说,我认为您应该进行代码覆盖,因为设置起来并不费力,而且它至少为您提供了比以前更多的代码信息。

    我同意获取最后一部分代码可能是最困难的,并且可能在某个点上它的 ROI 没有意义。

    【讨论】:

    • 正是我想说的。
    【解决方案2】:

    NCover 将帮助您显示覆盖范围。覆盖范围非常有用,不幸的是它显然可以被玩弄。如果你有糟糕的开发人员覆盖代码只是为了提高 %age,是的,它最终将毫无用处并隐藏未覆盖的区域。一旦你解雇了这些人,你就可以修复它并返回有用的信息。设定无法实现的覆盖率目标是获得糟糕覆盖率的必经之路。

    【讨论】:

    • 什么是合理的覆盖率?
    • 无论您真正喜欢什么。 70% 应该是可行的,但有些领域你会想要 100%,而其他领域你根本不会太在意。了解你的代码库是你最终的目标,所以在运行几次覆盖工具之后,你就会对你想要的东西有所了解。
    【解决方案3】:

    如果您正在进行测试驱动开发,您的代码应该在不尝试的情况下达到至少 70%。有些领域你不能或毫无意义地进行测试覆盖,这就是 NCover 的 NoCoverage 属性派上用场的地方(你可以标记要被代码覆盖排除的类)。

    不应严格遵守代码覆盖率,它应该只是一种有用的方式,可以提示您在测试中遗漏的区域。它应该是你的朋友,而不是纳粹分子!

    【讨论】:

      【解决方案4】:

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

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

      以这个sn-p为例:

      if (a == 2)
      {
          do_A_Stuff();
      }
      
      if (b == 3)
      {
          do_B_Stuff();
      }
      

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          Visual Studio Team System Developer Edition 包括代码覆盖率。这可以在运行单元测试时包含在内。

          打开 .testrunco​​nfig 并选择您想要数据的程序集。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-18
            • 2023-04-07
            • 1970-01-01
            • 2013-04-16
            • 2014-12-10
            • 1970-01-01
            相关资源
            最近更新 更多