【问题标题】:Why is NCover branch coverage 50% even though branch evaluates to both true and false?为什么即使分支评估为真假,NCover 分支覆盖率仍为 50%?
【发布时间】:2012-01-12 21:16:18
【问题描述】:

在这段小代码中:

public event StabilityChangedHandler StabilityChanged;

267   private void RaiseStabilityChanged()
      {
          if (StabilityChanged != null)
          {
  1           StabilityChanged();
          }
275   }

NCover 仅报告此方法的 50% 分支覆盖率。但是,我知道无论处理程序是否连接到 StabilityChangedEvent,都会调用我的 RaiseStabilityChanged()。在左侧,我放置了 NCover 报告的命中数。

为什么 NCover 可能会报告 50% 而不是 100%?

【问题讨论】:

  • 作为旁注,通常实现事件以便订阅/取消订阅是线程安全的。所以你应该把StabilityChanged复制到一个局部变量中,然后检查并调用那个变量。

标签: c# unit-testing events code-coverage ncover


【解决方案1】:

似乎从未在 StabilityChanged == null 的情况下运行任何测试。可能不是要运行的重要测试,但它会让你的覆盖率达到 100%

【讨论】:

  • 他们说它是在没有处理程序时运行的,这意味着它是空的。
  • 如果是这样,那将是 100% 的代码覆盖率...尝试在 StabilityChanged==null 的 if 语句中设置条件断点,看看它是否在测试执行期间被命中。
  • 这些命中计数也有问题,因为方法的结束括号没有办法比方法声明本身更频繁地被命中......这里有些不稳定......跨度>
  • 我同意这些数字看起来有误,因此数据可能也误报了分支覆盖率。
  • 抛出异常时是否有可能没有命中结束括号?
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 2020-05-13
  • 2016-08-25
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多