如何用受保护的初始化模拟对象



我正在尝试模拟亚马逊服务对象,以在相关代码上执行统计。我已经按照以下方式完成了此操作,但是每次启动时,它都会崩溃,错误失败:

捕获" nsinternalInconSistencyException"," - init不是有效的 initializer

通常,使用那里的工厂方法将创建相同的对象,因此看来初始化器是私有的。如何模拟此类对象?

 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()

您必须在init呼叫内拨打AWSIoTDataManager的指定初始化器,然后卸下override装饰器。这就是为什么您遇到错误的原因。

您无法通过分类来模拟某些东西。使用Swift,通常通过共享协议提供模拟。为您从第三方库中使用的接口定义协议。使用您的协议在库上创建一个空的扩展名(不需要代码)。然后针对测试中使用的协议实现模拟对象。

最新更新