是否可以在没有代码覆盖率工具作为入口点的情况下收集代码覆盖率数据?

Posted

技术标签:

【中文标题】是否可以在没有代码覆盖率工具作为入口点的情况下收集代码覆盖率数据?【英文标题】:Is it possible to gather code coverage data without the code coverage tool being the entry point? 【发布时间】:2017-07-17 20:22:51 【问题描述】:

我正在尝试从我的测试台收集代码覆盖率信息。

到目前为止,我考虑使用的大多数代码覆盖工具都是通过作为您的软件的入口点来运行的;通常,您将命令行参数或可执行路径传递给代码覆盖率工具,它会运行您的程序,并在运行时收集代码覆盖率数据。

不幸的是,我的测试解决方案会为每个测试启动和停止我的程序。这意味着传统的代码覆盖率行不通。

有没有办法在其他进程运行时被动监视可执行文件和相关 DLL 的代码覆盖率?

请注意,我并不是在要求具体的软件推荐。我只是想知道我需要的代码覆盖收集类型是否可行,如果可以,它叫什么,以便我可以自己做进一步的研究。

【问题讨论】:

【参考方案1】:

您可以使用vsperfcmd 和vsinstr。

您使用vsinstr 检测二进制文件,然后启动和停止vsperfcmd 以指示您的覆盖期的开始和停止。

所以你可以这样做:

vsinstr -coverage $(pathToDLL1)
vsinstr -coverage $(pathToDLL2)
vsinstr -coverage $(pathToDLL3)
vsperfcmd -start:coverage -output:SomePath\ManualCoverage.coverage
// DO YOUR TESTING HERE
vsperfcmd -shutdown

在 VS 2015 上,您可以在 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\x64 中查找两个二进制文件。

【讨论】:

我以前看过这些。我不太确定他们是否按照我认为的方式工作。我会用这些做一些测试。 实际上,这看起来行不通。在程序上使用 vsinstr 会阻止程序运行。我想这是一个签名问题。 如果您要签署程序集,请尝试此操作:***.com/questions/2711484/…

以上是关于是否可以在没有代码覆盖率工具作为入口点的情况下收集代码覆盖率数据?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA代码覆盖率工具JaCoCo--原理

Angular 库二级入口点测试代码覆盖率问题

入口点的 ECS 计划任务容器覆盖不起作用

选择代码覆盖工具的 10 个标准

如何:获取代码覆盖率数据

在 C# 中如何收集程序崩溃的堆栈跟踪