代码覆盖率疑难解答

在Visual Studio的代码复盖率分析工具收集本机和托管程序集的数据(.dll或.exe文件)。但是,在某些情况下,代码复盖率结果"窗口显示错误类似于“生成的空结果集:…”有几个可能的原因可能发生此错误。本主题用于帮助解决这些问题。

您应看到

如果选择在"测试"菜单上的一个 *** 分析代码复盖率 *** 命令,并且,如果生成和测试成功运行,则应该看到结果列表"代码复盖率"窗口中。可能需要展开项目以查看详细信息。

着色的代码覆盖率结果

有关更多信息,请参见 使用代码覆盖率确定所测试的代码量

查看结果可能的原因

JJ159523.collapse_all(zh-cn,VS.110).gif不带测试已执行

  • 分析
    检查您的"输出"窗口。在的 *** 显示输出 *** 下拉列表中,选择 *** 测试 ***。检查是否已记录的任何警告或错误。

  • 说明
    当测试运行时,代码复盖率分析完成。它只包括加载到内存中的程序集,当测试运行时。如果没有测试然后执行存在nothing代码复盖率的可以报告。

  • 解决方法
    在测试资源管理器中,选择 *** 运行任何 *** 验证测试成功运行。在使用 ***** 分析代码复盖率 *****之前修复任何失败。

JJ159523.collapse_all(zh-cn,VS.110).gif符号(.pdb)文件不可用

  • 分析
    打开生成目标文件夹(通常是bin \ debug),并验证的每个程序集,包括该目录的.pdb文件和该.dll或.exe文件同名。

  • 说明
    代码复盖率引擎对每个程序集具有其关联的.pdb文件访问在测试运行过程。如果没有特定程序集的.pdb文件,则不会进行分析。

    必须从编译生成.pdb文件和.dll或.exe文件同名。

  • 解决方法
    确保您的生成设置生成.pdb文件。如果.pdb文件未更新,在项目生成时,请打开项目属性,选择 *** 生成 *** 页上,选择 *** 高级 *** 并检查 *** 调试信息 ***

    如果.pdb和.dll或.exe文件在不同位置,请复制.pdb文件到同一目录中。配置代码复盖率引擎搜索.pdb文件在另一位置也是可能的。有关更多信息,请参见 自定义代码覆盖率分析

JJ159523.collapse_all(zh-cn,VS.110).gif使用检测的二进制文件或优化

  • 分析
    请确保二进制文件是否通过高级优化的任何窗体例如配置优化,或被一种分析工具检测例如vsinstr.exe或vsperfmon.exe。

  • 说明
    如果程序集由另一个分析工具已检测或了优化,程序集从代码复盖率分析省略。

    代码复盖率分析在这样的程序集不会执行。

  • 解决方法
    关闭优化和使用新的生成。

JJ159523.collapse_all(zh-cn,VS.110).gif没有代码管理(.NET)或本机(C++)代码

  • 分析
    验证在托管或C++代码运行某些测试。

  • 说明
    代码在Visual Studio的复盖率分析只能在托管代码和本机(C++)代码。如果使用第三方工具,某些或所有代码都不同平台可能执行。

  • 解决方法
    可用none。

JJ159523.collapse_all(zh-cn,VS.110).gifNGen安装程序集

  • 分析
    验证程序集从本机映像缓存不会加载。

  • 说明
    出于性能原因,未分析本机映像程序集。有关更多信息,请参见 Ngen.exe(本机映像生成器)

  • 解决方法
    使用程序集的一个MSIL版本。不要处理其与NGen。

JJ159523.collapse_all(zh-cn,VS.110).gif有语法错误的自定义.runsettings文件

  • 分析
    如果您使用自定义.runsettings文件,它可能包含语法错误。

    这会导致不运行代码复盖率。或代码复盖率窗口不打开在测试运行结束时,也显示旧的结果。

  • 说明
    可以运行单元测试与自定义.runsettings文件配置代码复盖率选项。选项允许您包括或排除文件。有关更多信息,请参见 自定义代码覆盖率分析

  • 解决方法
    具有错误的两种可能的类型:

  • XML错误

    打开在Visual Studio XML编辑器中.runsettings文件。查找错误表示。

  • 正则表达式错误

    文件中的每个字符串是正则表达式。检查每个错误的尤其是查找:

    • 不匹配的括号(...)或非转义括号\ (…\).如果若要匹配搜索字符串的一个括号,则必须对其进行转义。例如,匹配功能: .*MyFunction\(double\)

    • 星号或加号在表达式的开始。若要匹配任意字符串,请使用星号遵循一点: .*

JJ159523.collapse_all(zh-cn,VS.110).gif具有错误排除的自定义.runsettings文件

  • 分析
    如果您使用自定义.runsettings文件,请确保它包含您的程序集。

  • 说明
    可以运行单元测试与自定义.runsettings文件配置代码复盖率选项。选项允许您包括或排除文件。有关更多信息,请参见 自定义代码覆盖率分析

  • 解决方法
    从.runsettings文件中移除所有 Include 节点,然后移除所有 Exclude 节点。如果该解决此问题,请使它们在阶段。

    确定DataCollectors节点指定代码复盖率。它与 自定义代码覆盖率分析的示例比较。

某些代码始终显示为未涉及

JJ159523.collapse_all(zh-cn,VS.110).gif在本机DLL的初始化代码在检测前执行

  • 分析
    在静态链接的本机代码,它调用的初始化函数 DllMain 和代码有时显示为未复盖,因此,即使代码已执行。

  • 说明
    代码复盖率工具的工作方式是插入检测绑定到程序集,在应用程序启动运行之前。在超时前加载的所有程序集,初始化代码在 DllMain 时,将执行程序集加载,并且,在应用程序之前运行。代码将显示未涵盖。

    通常,这适用于静态加载的程序集。

  • 解决方法
    无。

请参见

其他资源

使用代码覆盖率确定所测试的代码量