OpenCover MSBuild 集成 - 未生成任何结果

Posted

技术标签:

【中文标题】OpenCover MSBuild 集成 - 未生成任何结果【英文标题】:OpenCover MSBuild Integration - No results generated 【发布时间】:2011-08-09 16:06:36 【问题描述】:

让 OpenCover 在我的机器上运行后,下一步是让它与构建服务器一起使用。

我一直在尝试将 OpenCover 与 Bamboo Build Server 上的 MSBuild 集成。在构建解决方案后,我已将 Build.proj 修改为如下运行 OpenCover:

<Target Name="TestAndCodeCoverage" DependsOnTargets="Build" >
    <Message Text="Executing Unit Tests and running OpenCover to check code coverage..." />
    <MakeDir Directories="Coverage" />
    <Exec Command='"C:\Program Files (x86)\OpenCover\OpenCover.Console.exe" -target:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" -targetargs:/testcontainer:"TestProject\bin\Release\TestProject.dll" -filter:+[*]* -output:Coverage\CodeCoverageResults.xml -register:user -mergebyhash' />
</Target>

“Coverage”目录在解决方案根目录(构建期间的工作目录)中创建。测试已运行并全部通过,但在构建日志中显示Committing.... 之后(将在命令行中显示的内容),没有生成任何结果并且构建继续执行下一个任务(使用 ReportGenerator 创建报告 -这会失败,因为没有创建 CodeCoverageResults.xml)。

在构建机器上的命令行中运行相同的命令时,一切都会按预期运行,并且可以通过 ReportGenerator 生成报告。

其他人有同样的问题吗?我是否需要像this PartCover 示例那样注册等效的 dll?

【问题讨论】:

【参考方案1】:

由于构建服务器是一项服务,所以我只会使用 -register 开关,但是如果在构建服务器上,我总是会说您应该使用 regsvr32 注册一次 32 位和 64 位分析器,然后删除 -注册开关,即无需每次都注册和注销分析器。

-register[:user] 开关适用于人们(比如我自己)喜欢在有限权限下工作的场景。

【讨论】:

听起来您将要解决我的问题,但我可以解释一下 -register 标志对我的作用以及为什么我需要它才能使其工作。干杯 分析器是 COM 对象,因此需要注册(在注册表中不少于)。现在您可以让主机(控制台)通过使用 -register 开关(或 -register:user 如果在非管理员帐户下或受 UAC 限制)来执行此操作,或者您可以使用 regsvr32 实用程序;在构建机器上,如果我安装了探查器,我更喜欢后者,并且如果我有多个构建被不同版本的探查器分析,我只会使用 -register 开关。 HTH 知道为什么我没有收到任何结果,尽管探查器已根据 Windows 日志正确注册和加载?这只发生在竹子中运行(设置为在本地系统帐户下的 Tomcat 6 中运行)时,使用命令行在同一构建目录中运行的测试成功交付结果。 PDB 通常是问题所在(您是否在“发布”版本中生成它们?未分析程序集/类/方法的原因记录在 XML 输出中。

以上是关于OpenCover MSBuild 集成 - 未生成任何结果的主要内容,如果未能解决你的问题,请参考以下文章

君生我未生,我生君已老

SonarQube MSBuild 集成失败:

OpenCover - 如何查看每个测试的覆盖率?

MSBuild - 在构建中集成跨平台编译器

用MSBuild和Jenkins搭建持续集成环境

基于OpenCover进行代码覆盖率测试