【问题标题】:How to reach full CodeCoverage? Free Blocks through Exception如何达到完整的 CodeCoverage?通过异常释放块
【发布时间】:2013-05-08 11:19:55
【问题描述】:

我有一个小问题。(在单元测试中) - 我对一个方法引发异常的类进行单元测试。 结构是:

    public bool DoA()
    {
        ThrowException();
        return true;
    }

    public void DoB()
    {
        ThrowException();
    }

    private static void ThrowException()
    {
        throw new NotSupportedException();
    }

CodeCoverage 的结果不是 100% - 来自 DoA() 的 return 语句和右大括号以及来自 Do()B 的右大括号不在 codeCoverage 之下(因为它们没有到达)。 我知道,这对于单元测试来说并不重要,因为我仍然检查了功能,但只是对我来说 - 它可能以及我如何达到完整的 CodeCoverage? 也许通过排除? (可能更改测试代码/程序代码)

【问题讨论】:

  • 代码无法访问,因为 100% 的时间你会抛出异常——当你这样做时,你期望如何获得 100% 的代码完成?你根本做不到。
  • 这就是我所期望的 :( - 希望最后死去......

标签: c# visual-studio unit-testing mstest


【解决方案1】:

您无法访问代码的 return true 部分,因此您可以将其删除。在您的项目中有无法访问的代码是不好的。或者因为DoA()函数没有完成,可以使用:[ExcludeFromCodeCoverage]

[ExcludeFromCodeCoverage]
public bool DoA()
{
    ThrowException();
    return true;
}

【讨论】:

  • 谢谢,我仍然知道这个属性,但它只涵盖了完整的方法——而不是单行;)。 - 看起来我必须在这种情况下放弃完整的代码覆盖。
【解决方案2】:

这里不可能得到全面的报道。 throw 之后的所有内容都是死代码。

此外,代码(行)覆盖率并不是测试中的圣杯。是的,这很重要,但这不是一个最终标准。

【讨论】:

  • 谢谢,我知道那不是圣杯——对我来说不是,但有时对头来说;)
猜你喜欢
  • 2017-05-02
  • 2012-05-03
  • 2015-07-30
  • 2012-05-10
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
相关资源
最近更新 更多