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

如何在Swift Packages中排除SwiftUI Previews不计入代码覆盖率?

Swift Packages 排除预览代码覆盖率的解决方案

以下是几种可行的方法,帮你把SwiftUI预览从单元测试的代码覆盖率统计中排除:

方法1:用自定义编译条件隔离预览代码

这是最通用的方案,不管用Xcode还是命令行swift test都能生效:

  1. 在Package.swift的测试目标中添加自定义编译标志:
.testTarget(
    name: "YourPackageTests",
    dependencies: ["YourPackage"],
    swiftSettings: [
        .define("TESTING") // 添加这个编译定义
    ]
),
  1. 给所有预览代码加上编译条件判断,测试时不编译预览:
#if !TESTING
struct YourView_Previews: PreviewProvider {
    static var previews: some View {
        YourView()
    }
}
#endif

这样测试套件运行时,预览代码不会被编译,自然不会计入覆盖率统计。

方法2:将预览文件单独存放并通过Package配置排除

把所有预览文件放到单独的目录(比如Previews/),然后在Package.swift中配置主目标仅在非测试环境下包含该目录:

.target(
    name: "YourPackage",
    dependencies: [],
    sources: [
        "Sources/",
        // 仅在Debug非测试、Release环境下包含预览目录
        .init(path: "Previews/", condition: .when(configuration: .release)),
        .init(path: "Previews/", condition: .when(configuration: .debug, excludeWhen: .testing))
    ]
),

这种方式能让代码结构更清晰,不用给每个预览加编译条件。

方法3:通过Xcode Scheme手动排除(仅Xcode环境有效)

如果只在Xcode中开发和测试,可以直接修改Scheme的覆盖率配置:

  • 打开Scheme编辑器:Product > Scheme > Edit Scheme
  • 切换到Test选项卡,选择Coverage标签
  • 展开你的Swift Package目标,找到所有带_Previews后缀的文件,取消勾选它们
    这样Xcode统计覆盖率时会自动忽略这些预览文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:52:17