如何在Linux或OS X上为Swift包生成代码覆盖?

时间:2016-11-25 01:14:43

标签: linux swift xcode macos

我正在寻找一种为使用Swift Package Manager创建的Swift包生成代码覆盖率的方法。在OS X上,我可以在运行swift package generate-xcodeproj并在Xcode下运行测试套件后使用Xcode实现此目的,此时我可以使用标准的覆盖工具。

是否有任何工具可以在OS X和Linux上实现?

2 个答案:

答案 0 :(得分:5)

目前,我还没有发现直接支持Linux的工具。对于它的价值,我们仍然对我们支持在Linux和macOS上运行的Web框架和HTTP服务器的代码覆盖解决方案感到满意。

我们基于Swift Package Manager的项目Kitura使用Travis CI进行持续集成。每个构建都将在 Linux和macOS上编译和运行测试。我们还在Travis CI上运行夜间构建,生成覆盖数据,然后上传到codecov.io以生成this等报告。

在底层,构建脚本运行swift package generate-xcodeproj,然后xcodebuild test运行代码覆盖率。代码覆盖率仅在包含xcodebuild的macOS构建环境中运行。由于我们的Linux和macOS代码路径非常相似,因此覆盖率统计数据足以满足我们的需求,我们仍然为每个操作系统独立运行测试。

答案 1 :(得分:5)

实际上可以通过将--enable-code-coverage传递到swift test

来实现
$ swift test --enable-code-coverage

这将在Linux上的.xctest中生成一个.build/x86_64-unknown-linux/debug/捆绑软件,并在.build/x86_64-unknown-linux/debug/codecov/中生成一个profdata文件,然后您可以将其传递给llvm-cov以生成报告。

例如

$ llvm-cov report .build/x86_64-unknown-linux/debug/PredicatePackageTests.xctest -instr-profile=.build/x86_64-unknown-linux/debug/codecov/default.profdata -use-color

这将生成类似于以下报告的报告:

report

有关更多信息,请参见llvm-cov report --help,它甚至可以生成HTML报告。