【问题标题】:What .Net coverage tools support "condition coverage"? [closed]哪些 .Net 覆盖工具支持“条件覆盖”? [关闭]
【发布时间】:2014-04-10 18:12:41
【问题描述】:

我刚开始使用代码覆盖工具(主要在 C# 中)。到目前为止,我已经测试了 NCrunch 和 DotCover。

他们似乎都在分支和函数覆盖方面做得很好,但我不能确定他们是否在做条件覆盖。例如,在我正在测试的某些代码中,只要至少有一条路径通过(或者我错了吗?),以下显示的内容就被涵盖了。但是,在我看来,只有在通过代码的两个逻辑路径都被覆盖的情况下才应该被覆盖。

if (item != "")
{
    glc.AddGrayListItem(GrayListTypeEnum.BlackList, item);
}

我想知道的是,DotCover 或 NCrunch(或任何其他 C# 工具)是否会告诉我这不包括在内,除非两种情况 (item != null) 和 (item == null) 都经过测试.

我查看了各种网站,但似乎无法找到关于这些工具中的任何一个是否以这种方式工作的明确答案,或者是否有另一种工具以这种方式工作。你们中的任何人都对各种代码覆盖工具提供或不提供哪些类型的覆盖有明确的信息吗?

【问题讨论】:

  • 我不太确定我能做些什么来使这个评论更有成效或研究得更多。我已经查看了产品的论坛,搜索了这个站点以及其他站点,但还没有遇到任何简明的答案。任何帮助将不胜感激。
  • 好的,我试图将这个问题重新定义为更注重事实。我对人们对哪些覆盖工具更好/更差的看法并不感兴趣。我很想知道哪些工具能够满足哪些类型的覆盖标准,或者如何获得我提到的工具来满足我的需求。

标签: c# code-coverage ncover dotcover ncrunch


【解决方案1】:

当前版本的 OpenCover 将在分支覆盖率指标中涵盖这一点:

【讨论】:

    【解决方案2】:

    如果其他人对这个问题的答案感兴趣...... NCover 是我发现的唯一可以完成这项工作的工具(2017 年)。我检查了 Visual Studio Enterprise Code Coverage、NCrunch、Resharper dotCover、OpenCover 和 NDepend。他们都不支持您要求的 Condition Coverage 案例。如果单元测试在您的示例中没有涵盖真假两种情况,则 NCover 显示 66.67% 的条件覆盖率。

    【讨论】:

      【解决方案3】:

      就我个人而言,我知道没有覆盖分析工具可以告诉您if 语句的假设(不存在)else 部分是否会被执行。

      【讨论】:

      • 我想我在脑海中构想的不是假设 else 语句的执行,而是代码路径。这段代码有两条离散的路径。被测试的语句的计算结果为 true 并且块被执行,或者语句的计算结果为 false 并且块不被执行。在我看来,覆盖 if 块中的语句与覆盖 if 块本身的条件之间应该有区别。没有工具可以区分吗?
      • 我完全理解你的意思,但我认为没有任何工具可以做到这一点。相反,它们都依赖于检测(以一种或另一种方式)实际存在的代码并报告它是否被执行。
      • 这是一个不幸但可以理解的限制。感谢您的回复!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2011-03-17
      • 2021-03-28
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多