如何获取无显式实现Swift API的Xcode测试覆盖率?
Xcode 14 统计无显式实现Swift API测试覆盖率的解决办法
针对Xcode 14跳过无显式实现的Swift API(如属性、枚举用例、协议等)覆盖率统计的问题,有以下几种可行的解决办法:
1. 用llvm-cov命令行生成完整覆盖数据
Xcode的UI界面和xccov工具会过滤掉这类无显式实现的构造,但底层的llvm-cov可以输出更原始、完整的覆盖信息,步骤如下:
- 先通过xcodebuild运行测试并生成xcresult包:
xcodebuild test -scheme 你的Scheme名称 -destination 'platform=iOS Simulator,name=iPhone 14' -resultBundlePath ./TestResults.xcresult - 然后用
llvm-cov show命令提取并展示完整覆盖数据(需提前安装jq工具解析json):
执行后会输出包含所有Swift构造的覆盖详情,包括原本被跳过的属性、枚举用例等。llvm-cov show -instr-profile=$(xcrun xcresulttool get --path TestResults.xcresult --format json | jq -r '.actions._values[] | select(.actionType == "test").coveredDataPaths._values[0]') ./Build/Products/Debug-iphonesimulator/你的App.app/你的App
2. 添加临时空实现(侵入式 workaround)
给需要统计的无显式实现API添加空的显式代码,让Xcode的覆盖率工具能识别到:
- 枚举示例:
在测试代码中调用enum NetworkStatus { case connected case disconnected case connecting // 临时空方法,用于触发覆盖率统计 func trackCoverage() {} }NetworkStatus.connected.trackCoverage(),Xcode就能统计到该枚举用例的使用情况。注意这个方法会修改业务代码,仅适合临时测试场景。
3. 升级到Xcode 15及以上版本
Apple在Xcode 15中修复了Swift覆盖率统计的相关缺陷,原生支持无显式实现API的覆盖率统计,升级后可以直接在Xcode UI界面或xccov生成的报告中查看这些构造的覆盖状态。
内容的提问来源于stack exchange,提问作者skyylex
相关产品推荐
相关产品推荐

