代码之家  ›  专栏  ›  技术社区  ›  ozd

Swift单元测试特定版本

  •  0
  • ozd  · 技术社区  · 5 年前

    如果我有一些具有以下方法的库:

    public struct Foo {
      @available(macOS 10.15, *)
      func greatNewFeature() -> String {
        return "new feature"
      }
    
      func legacyFeature() -> String {
        return "legacy feature"
      }
    }
    

    然后是一些使用它的代码:

    func methodToTest() -> String {
      let foo = Foo()
      guard #available(macOS 10.15, *) else {
        return foo.legacyFeature()
      }
      return foo.greatNewFeature()
    }
    

    有没有一种方法可以让我编写单元测试来全面覆盖 methodToTest ?

    • 您不能将可用性检查视为注入功能—编译器特别需要 @available 关键字,以便使用 greatNewFeature 方法
    • #available(macOS 10.15, *) || isMacOS10_15 出于与前一点类似的原因。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Dávid Pásztor    6 年前

    您可以在测试中创建是否跳过操作系统版本检查的标志,并 && #available

    这样你只需要打电话 testFooFeature macOS 10.15 .

    var forceOldOSVersion = true
    
    func testFooFeature() -> String {
        let foo = Foo()
        if !forceOldOSVersion, #available(macOS 10.15, *) {
            return foo.greatNewFeature()
        } else {
            return foo.legacyFeature()
        }
    }
    
    testFooFeature() // "legacy feature"