首页 > 解决方案 > 从代码覆盖范围中排除 SwiftUI 预览?

问题描述

我无法让我的代码覆盖率达到最小值。90% 因为 XCode 考虑了 PreviewProvider。

我应该怎么办?删除所有 SwiftUI 预览?或者有没有办法可以排除一些带有“PreviewProvider”关键字等的行。

Xcode ver 12.0 Jenkins 用于 CI slather & cobertura 用于代码覆盖

附带问题,没有可用于单元测试 SwiftUI 组件的官方测试套件。你们根本不测试它们,还是使用第三方库?我一直在使用 ViewInspector,但我不喜欢用它来跟踪组件的更新状态,我需要在实际代码库本身中包含测试代码。

标签: swiftxcodeswiftuicobertura

解决方案


Here is a description of working approach (demo with Xcode 13 / iOS 15):

  1. Add explicit Testing (name as you want) configuration for UT

demo1

  1. Add conditional macro TESTING (name as you want) for Testing configuration

demo2

  1. Put preview provider into condition like
struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
            .padding()
    }
}

#if !TESTING
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
  1. Set Testing configuration for UT schema

demo3

  1. Run UT and observe coverage

demo4


推荐阅读