在Visual Studio的代码复盖率分析工具收集本机和托管程序集的数据(.dll或.exe文件)。但是,在某些情况下,代码复盖率结果"窗口显示错误类似于“生成的空结果集:…”有几个可能的原因可能发生此错误。本主题用于帮助解决这些问题。
您应看到
如果选择在"测试"菜单上的一个 *** 分析代码复盖率 *** 命令,并且,如果生成和测试成功运行,则应该看到结果列表"代码复盖率"窗口中。可能需要展开项目以查看详细信息。
有关更多信息,请参见 使用代码覆盖率确定所测试的代码量。
查看结果可能的原因
不带测试已执行
分析
检查您的"输出"窗口。在的 *** 显示输出 *** 下拉列表中,选择 *** 测试 ***。检查是否已记录的任何警告或错误。说明
当测试运行时,代码复盖率分析完成。它只包括加载到内存中的程序集,当测试运行时。如果没有测试然后执行存在nothing代码复盖率的可以报告。解决方法
在测试资源管理器中,选择 *** 运行任何 *** 验证测试成功运行。在使用 ***** 分析代码复盖率 *****之前修复任何失败。
符号(.pdb)文件不可用
分析
打开生成目标文件夹(通常是bin \ debug),并验证的每个程序集,包括该目录的.pdb文件和该.dll或.exe文件同名。说明
代码复盖率引擎对每个程序集具有其关联的.pdb文件访问在测试运行过程。如果没有特定程序集的.pdb文件,则不会进行分析。必须从编译生成.pdb文件和.dll或.exe文件同名。
解决方法
确保您的生成设置生成.pdb文件。如果.pdb文件未更新,在项目生成时,请打开项目属性,选择 *** 生成 *** 页上,选择 *** 高级 *** 并检查 *** 调试信息 ***。如果.pdb和.dll或.exe文件在不同位置,请复制.pdb文件到同一目录中。配置代码复盖率引擎搜索.pdb文件在另一位置也是可能的。有关更多信息,请参见 自定义代码覆盖率分析。
使用检测的二进制文件或优化
分析
请确保二进制文件是否通过高级优化的任何窗体例如配置优化,或被一种分析工具检测例如vsinstr.exe或vsperfmon.exe。说明
如果程序集由另一个分析工具已检测或了优化,程序集从代码复盖率分析省略。代码复盖率分析在这样的程序集不会执行。
解决方法
关闭优化和使用新的生成。
没有代码管理(.NET)或本机(C++)代码
分析
验证在托管或C++代码运行某些测试。说明
代码在Visual Studio的复盖率分析只能在托管代码和本机(C++)代码。如果使用第三方工具,某些或所有代码都不同平台可能执行。解决方法
可用none。
NGen安装程序集
分析
验证程序集从本机映像缓存不会加载。说明
出于性能原因,未分析本机映像程序集。有关更多信息,请参见 Ngen.exe(本机映像生成器)。解决方法
使用程序集的一个MSIL版本。不要处理其与NGen。
有语法错误的自定义.runsettings文件
分析
如果您使用自定义.runsettings文件,它可能包含语法错误。这会导致不运行代码复盖率。或代码复盖率窗口不打开在测试运行结束时,也显示旧的结果。
说明
可以运行单元测试与自定义.runsettings文件配置代码复盖率选项。选项允许您包括或排除文件。有关更多信息,请参见 自定义代码覆盖率分析。解决方法
具有错误的两种可能的类型:
XML错误
打开在Visual Studio XML编辑器中.runsettings文件。查找错误表示。
正则表达式错误
文件中的每个字符串是正则表达式。检查每个错误的尤其是查找:
不匹配的括号(...)或非转义括号\ (…\).如果若要匹配搜索字符串的一个括号,则必须对其进行转义。例如,匹配功能: .*MyFunction\(double\)
星号或加号在表达式的开始。若要匹配任意字符串,请使用星号遵循一点: .*
具有错误排除的自定义.runsettings文件
分析
如果您使用自定义.runsettings文件,请确保它包含您的程序集。说明
可以运行单元测试与自定义.runsettings文件配置代码复盖率选项。选项允许您包括或排除文件。有关更多信息,请参见 自定义代码覆盖率分析。解决方法
从.runsettings文件中移除所有 Include 节点,然后移除所有 Exclude 节点。如果该解决此问题,请使它们在阶段。确定DataCollectors节点指定代码复盖率。它与 自定义代码覆盖率分析的示例比较。
某些代码始终显示为未涉及
在本机DLL的初始化代码在检测前执行
分析
在静态链接的本机代码,它调用的初始化函数 DllMain 和代码有时显示为未复盖,因此,即使代码已执行。说明
代码复盖率工具的工作方式是插入检测绑定到程序集,在应用程序启动运行之前。在超时前加载的所有程序集,初始化代码在 DllMain 时,将执行程序集加载,并且,在应用程序之前运行。代码将显示未涵盖。通常,这适用于静态加载的程序集。
解决方法
无。