我正在寻找一种为使用Swift Package Manager创建的Swift包生成代码覆盖率的方法。在OS X上,我可以在运行swift package generate-xcodeproj
并在Xcode下运行测试套件后使用Xcode实现此目的,此时我可以使用标准的覆盖工具。
是否有任何工具可以在OS X和Linux上实现?
答案 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
这将生成类似于以下报告的报告:
有关更多信息,请参见llvm-cov report --help
,它甚至可以生成HTML报告。