VS2013中的代码覆盖率显示测试的覆盖范围,而不是实际代码

时间:2015-01-08 09:35:48

标签: visual-studio-2013 code-coverage mstest

我正在关注 VS 2013 http://msdn.microsoft.com/en-us/library/dd537628.aspx中的代码覆盖率。它显示测试的覆盖范围而不是实际代码。

我从测试资源管理器中选择了单元测试,然后点击Analyze Code Coverage -> Selected Test。代码覆盖窗口在底部打开,它显示单元测试的dll,它的覆盖范围和代码覆盖率的实际dll没有显示。

另外,我查看了文章http://msdn.microsoft.com/library/jj159523.aspx。将pdbs和dll复制到同一位置。在代码覆盖窗口消息中

  

生成空结果:未检测到二进制文件。确保测试运行,加载了所需的二进制文件,具有匹配的符号文件,并且未通过自定义设置排除。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=253731"

对此有何看法?

2 个答案:

答案 0 :(得分:1)

我已经尝试了链接中给出的步骤。

http://blogs.msdn.com/b/allendm/archive/2012/09/08/empty-coverage-file-with-profiler-related-errors-in-the-event-logs.aspx

如果您使用VS 2013,则会略有变化。

a)环境变量VS120COMNTOOLS设置为\ common7 \ tools

b)Regkey HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 12.0 \ InstallDir设置为\ Common7 \ IDE \

c)covrun32.dll和covrun64.dll存在于" \ Team Tools \ Dynamic Code Coverage"

删除了VS110COMNTOOLS环境变量。这些变化对我有用。

答案 1 :(得分:-1)

我能够解决我的问题。我的生产DLL上没有发生代码覆盖的原因是:reason =" has_fixed_base"。将此设置更改为:是(/DYNAMICBASE)后,覆盖范围就开始有效了。

检查这些步骤会很有帮助:

  1. 打开项目属性
  2. 转到Linker->Advanced页面
  3. 在此,请检查Randomized Base Address
  4. 将其更改为是(/DYNAMICBASE
  5. 这应该开始代码覆盖。