如何将SwiftUI文件排除在单元测试代码覆盖率统计之外?
解决SwiftUI #Preview代码被纳入单元测试覆盖率统计的问题
你遇到的情况是因为Xcode(尤其是15及以上版本)默认会将#Preview宏展开后的代码纳入单元测试覆盖率统计,并非遗漏基础配置,可通过以下两种方式解决:
方法一:用自定义编译条件隔离预览代码
- 打开Xcode,选中测试目标(不是主App目标),进入Build Settings
- 搜索
Other Swift Flags,添加编译标志-D TESTING - 修改你的SwiftUI代码,将
#Preview块用条件编译包裹:
struct ContentView: View { var body: some View { VStack { Text("Hello world") } } } #if !TESTING #Preview { ContentView() } #endif
这样测试目标编译时会跳过预览代码,自然不会统计其覆盖率。
方法二:在测试目标中排除预览相关文件
如果不想修改代码,可直接在测试目标的编译阶段排除包含#Preview的文件:
- 选中测试目标,进入Build Phases -> Compile Sources
- 找到包含
#Preview的文件(比如ContentView.swift),点击移除按钮 - 注意:这种方式会让测试目标不编译该文件的任何代码,若该文件中有测试依赖的逻辑,不建议使用。
补充说明
早期Xcode版本中#Preview可能默认被覆盖率工具忽略,但新版本Xcode优化了宏处理逻辑,会将其视为常规代码纳入统计,因此需要手动配置排除规则。
内容的提问来源于stack exchange,提问作者Sivaprasad Km
相关产品推荐
相关产品推荐

