如何使用受保护的init模拟对象

时间:2017-09-02 06:50:27

标签: ios swift unit-testing mocking

我正在尝试模拟一个amazon服务对象来对相关代码执行UnitTesting。我已经按照以下方式完成了它,但每次初始化时它崩溃都会导致错误失败:

  

捕获“NSInternalInconsistencyException”,“- init无效   初始化

通常使用工厂方法创建相同的对象,因此初始化程序似乎是私有的或其他东西。如何嘲笑这样的对象?

 class MyAWSiOTDataManager : AWSIoTDataManager {
    override func publishString(_ string: String, onTopic topic: String, qoS qos: AWSIoTMQTTQoS) -> Bool {
          print("publish string called")
          return true
    }
    override init() {

    }
 }

 let manager = MyAWSiOTDataManager()

1 个答案:

答案 0 :(得分:2)

您必须在AWSIoTDataManager来电中调用init的指定初始值设定项,然后移除override装饰器。这就是你得到错误的原因。

你不能通过子类化来嘲笑它。使用Swift,通常通过共享协议提供模拟。为您在第三方库中使用的接口定义协议。使用您的协议在库上创建一个空的扩展(不应该有代码)。然后针对协议实现模拟对象,以便在测试中使用。