You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排除SwiftUI PreviewProvider,满足90%最低代码覆盖率要求?

嘿,这个问题我之前帮团队解决过,完全不用删掉所有SwiftUI预览的!给你几个靠谱的方案,适配你用的Xcode 12、Slather和Cobertura环境:

方案1:用编译条件隔离PreviewProvider代码

这是最推荐的做法,既能保留本地开发的预览功能,又能让CI环境的覆盖率统计自动忽略这些代码。只需把所有预览代码包裹在#if DEBUG编译块里:

struct MyView: View {
    var body: some View {
        Text("Hello World")
    }
}

#if DEBUG
struct MyView_Previews: PreviewProvider {
    static var previews: some View {
        MyView()
    }
}
#endif

Jenkins上的CI构建一般用的是Release模式,此时DEBUG条件不生效,预览代码根本不会被编译,自然不会拖低覆盖率。本地开发时切换到Debug模式,预览功能完全不受影响。

方案2:配置Slather忽略PreviewProvider相关代码

如果不想修改现有代码,也可以直接在Slather的配置里过滤掉预览相关内容:
在项目根目录创建.slather.yml配置文件,添加忽略规则:

ignore:
  - "*PreviewProvider*"
  - "*_Previews.swift"

这样Slather生成Cobertura格式的覆盖率报告时,会自动跳过所有包含PreviewProvider关键字的代码,以及以_Previews结尾的预览文件。

方案3:通过Xcode测试计划调整覆盖率范围

你也可以直接在Xcode的测试计划里手动排除预览文件:

  1. 打开你的测试计划,切换到「Coverage」标签页
  2. 在文件列表里找到包含PreviewProvider的文件,取消勾选它们
  3. 保存测试计划后,Jenkins上的构建会遵循这个设置统计覆盖率

不过这个方案需要手动维护排除列表,灵活性不如前两个,适合临时快速调整。

总结一下:优先选方案1(编译条件),它从根源上解决问题,没有冗余代码;如果不想改代码就用方案2(Slather配置),简单高效。完全没必要删掉所有SwiftUI预览!

内容的提问来源于stack exchange,提问作者Qingwan Kuah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:07:28