使用gcovr和Xcode 5进行代码覆盖率测试无效。

10

我正在使用gcovr来生成cobertura的代码覆盖率报告。在xcode 4.6下一切都很正常。但是当我升级到xcode5之后,我得到的覆盖率是0%...

我的设置:

  • gcovr 3.0
  • Xcode 5 (Apple LLVM 5)
  • 'Generate Test Coverage Files'设置为YES
  • 'Instrument Program Flow'设置为YES

我使用的命令如下:

gcovr -r . --object-directory Build/Intermediates/myApp.build/Debug-iphonesimulator/myApp.build/Objects-normal/i386 --exclude '.*Tests.*' --exclude '.*KiwiUnitTest' --exclude '.*main.*' --xml > reports/coverage.xml

有人遇到相同的问题或者更好的,有解决方案吗?:)


3
可能是[Xcode5命令行代码覆盖率(用于CI构建)]的重复内容(链接为https://dev59.com/I2Ml5IYBdhLWcg3wcmvD)。 - Gardner Bickford
不,这不是重复的问题。@GardnerBickford的建议涉及生成.gcno/.gcda文件。而这个问题涉及到gcovr的使用(和故障)。 - Rayfleck
@Rayfleck请再次阅读这个问题以及答案Xcode5 Code Coverage (from cmd-line for CI builds)。升级到Xcode 5后,gcovr无法工作的原因是Xcode 5编译器不会将gcno/gcda文件刷新到磁盘上。没有这些文件,gcovr将报告没有覆盖率。 - Gardner Bickford
@GardnerBickford - 啊,是的,我改正了。谢谢。我投票关闭了这篇帖子。 - Rayfleck
Xcode 5.1修复了这个问题并添加了llvm-cov。 - ıɾuǝʞ
谢谢你们。我现在没有时间尝试它。我会尽快测试并发布对我有效的内容。 - Alex
2个回答

3

现在它又可以工作了... :)

正如@kenji所说,Xcode 5.1解决了这个问题。顺便说一下谢谢。

以下是我的工作环境和配置供有兴趣的人参考

  • Xcode 5.1.1 (来自AppStore)
  • gcovr 3.1预发布版 (通过easy_install安装)

并且在我的项目中,在“Build Settings”下我设置了以下内容:

  • 'Generate Test Coverage Files' 设置为YES
  • 'Instrument Program Flow' 设置为YES

在运行测试之后,我执行以下命令:(在jenkins上发生)

gcovr -r . --object-directory Build/Intermediates/MyProj.build/Debug-iphonesimulator/KiwiUnitTest.build/Objects-normal/i386 --exclude '.*Tests.*' --exclude '.*KiwiUnitTest' --exclude '.*main.*' --xml > reports/coverage.xml

完成。

对不起各位让你们等待了答案,感谢大家的帮助。


0

首先确保已经创建了您的 .gcda 和 .gcno 文件!

(检查:~/Library/Developer/Xcode/DerivedData/{YOUR-PROJECT-NAME}/Build/Intermediates/{YOUR-PROJECT-NAME}.build/Debug-iphonesimulator/{YOUR-PROJECT-NAME}.build/Objects-normal/i386 )

如果它们已经成功创建,您需要执行以下操作: (如果没有,请查看您问题下面的评论)

  1. 将i386文件夹中的所有文件(如上所述的完整路径)复制到您的工作区,即.h和.m文件所在的位置。

  2. 运行终端并将父工作目录更改为您的工作区

     cd [您的工作区路径]
    
  3. 运行gcovr

     gcovr -r . --xml  > reports/coverage.xml
    

如果您正在使用Jenkins(我假设是这样),那么以下将是您的进一步步骤: 使用Jenkins生成gcda文件以查看IOS中XCTests的代码覆盖率

如果您还有问题,请告诉我!


最新版本的gcovr(v3.2)似乎无法处理如果您定义了--object-directory的任何文件。只有将您的.gcno和.gcna文件复制到由-r参数定义的路径才能使其正常工作。https://github.com/gcovr/gcovr/issues/61 - Ari Braginsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接