【问题标题】:Code Coverage analysis includes internal Types代码覆盖率分析包括内部类型
【发布时间】:2015-07-31 03:47:02
【问题描述】:

我有一个项目,我针对该项目运行了 Visual Studio 2015 代码覆盖率分析。在结果中,它包括我无法测试的结果层次结构中的内部类。我不想使用InternalsVisibleToAttribute,但我也不喜欢它被算作代码覆盖路径的一部分。

有没有办法让 Visual Studio 忽略内部类,以便代码覆盖结果只包括我可以通过单元测试实际接触到的公共类?

CachedTypeData 是一个内部密封类,具有一系列泛型方法。如您所见,该类型包含在我的结果中,紧挨着两个公共课程Autosave<T>EngineTimer<T>

【问题讨论】:

    标签: unit-testing code-coverage visual-studio-2015


    【解决方案1】:

    不,Visual studio 没有这样的功能,但是您可以将 ExcludeFromCodeCoverage 属性放在您的 Internal 类中。

    注意:Visual Studio 的 CCA 通过 IL 衡量 CC 的百分比,如果您的 Classes under test 使用 Internal 方法/类,那么那些 Internal 方法/类将被覆盖。 因此,在大多数情况下,您不应该拆分/排除您的 Internal 类。

    【讨论】:

    • 那么如果我测试调用内部类方法的公共方法,它会被视为我的代码覆盖率的一部分吗?
    • @JohnathonSullinger 是的。
    • 我还注意到我的 IDisposable 类有时会获得 100% 的代码覆盖率,尽管从未实际测试或调用过调用 Dispose() 的方法。我想这是一个不同的问题。
    • @JohnathonSullinger 这是一个不同的问题,我需要更多详细信息,但是我将向您解释 CC 的工作原理,然后您将能够找到它发生的原因。 CC 的工作原理如下:它获取目标目录中的所有 dll,并基于 IL 代码构建有向图 G。它基于 G 构建所有可能的定向路径。执行测试并标记相关路径。计算百分比。具有 100% CC 的方法意味着您遍历所有路径(具有 100% 的类意味着所有方法都是 100%)。因此,如果您在至少一项测试中执行 Dispose,则可以实现 100% 的覆盖率。
    • 我在上面贴了another question。您所解释的是我所期望的,但我还遇到了其他奇怪的情况。
    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2013-05-31
    • 2016-07-08
    相关资源
    最近更新 更多