【问题标题】:Swift unit tests mock class static methodSwift 单元测试模拟类静态方法
【发布时间】:2017-07-28 11:43:59
【问题描述】:

我在类中有一个静态方法

class A {
    static func myStaticMethod() -> B {
        return B()
    }
}

class B {
    func getTitle() -> String {
        // some functionality here
    }
}

在我想测试的类方法中,我像这样使用它:

func someBoolFunc() -> Bool {
    var b = A.myStaticMethod()
    if (b.getTitle() = “hello”) {
         return true
    }
    return false
}

如何为此编写模拟类...我试过了:

class MockA: A {
    var myTitle:String
    // this seems incorrect, because i didn't override static function
    func myStaticMethod() -> MockB {
        var b = MockB()
        b.title = myTitle
        return b
    }
}

class MockB: B {
    var myTitle:String    

    func getTitle() -> String {

        return myTitle
    }
}

在测试中我想使用类似的东西:

func testExample() {
    A = MockA
    MockA.title = "My title"
    // And now this func should use my MockA instead of A
    someBoolFunc()
}

当然这只是理论上的:(

【问题讨论】:

    标签: ios swift macos unit-testing


    【解决方案1】:

    也许是这样?

    protocol AProto {
      static func myStaticMethod() -> BProto
    }
    
    class A: AProto {
      static func myStaticMethod() -> BProto {
        return B()
      }
    }
    
    class MockA: AProto {
      static func myStaticMethod() -> BProto {
        return MockB()
      }
    }
    
    protocol BProto {
      func getTitle() -> String
    }
    
    class B: BProto {
      func getTitle() -> String {
        return "hello"
      }
    }
    
    class MockB: BProto {
      func getTitle() -> String {
        return "bye bye"
      }
    }
    
    func someBoolFunc(_ aProto: AProto.Type = A.self) -> Bool {
      var b = aProto.myStaticMethod()
      if (b.getTitle() == "hello") {
        return true
      }
      return false
    }
    
    print(someBoolFunc())
    print(someBoolFunc(MockA.self))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 2019-05-11
      • 2017-06-29
      • 1970-01-01
      相关资源
      最近更新 更多