2017-09-02 58 views
0

我试图模拟一个亚马逊服务对象来对相关代码执行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() 

回答

2

您必须调用指定初始化请致电init,并删除override装饰者。这就是你得到错误的原因。

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

+0

是的,谢谢你的工作。 –