【问题标题】:app.build's gcda/gcno files vs appTests.build's gcda/gcno files?app.build 的 gcda/gcno 文件与 appTests.build 的 gcda/gcno 文件?
【发布时间】:2014-03-05 03:46:40
【问题描述】:

我正在尝试为我的 iOS 项目配置代码覆盖率。我已经为我的应用程序目标和测试目标设置了项目设置“生成测试覆盖文件”以及“仪器程序流程”。我还使用 Coverstory 的 gcovr flush hack 在 iOS7 中生成 gcda 文件。

我的问题是,当我在干净的构建上运行测试时,我在两个目录中看到 gcda 和 gcno 文件(对于我项目的每个源文件,例如 AppDelegate.gcda 在两个目录中):

~/Library/Developer/Xcode/DerivedData/MyApp-/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects-normal/i386/

~/Library/Developer/Xcode/DerivedData/MyApp-/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyAppTests.build/Objects-normal/i386/

在这些目录中生成 gcno 和 gcda 文件的方式有什么区别? (有一些区别,因为如果我在 Coverstory 中查看文件,某些文件的覆盖范围是不同的)。

【问题讨论】:

    标签: ios iphone objective-c xcode


    【解决方案1】:

    您有两个不同的目标,并且为两个测试目标“仪器程序流程”启用了标志“生成测试覆盖文件”。

    MyApp.build 包含在模拟器上运行构建时的代码覆盖率,MyAppTests 显示您的实际测试代码覆盖率。

    前一个在某些情况下很有用,例如您想确定未使用代码的哪一部分。

    为避免混淆,您应该始终在主要目标中启用标志。当您运行单元测试用例时,它将覆盖同一文件夹中的 gcda 文件,始终为您提供两种配置的最新信息。

    【讨论】: