我想对一个充当类的类进行单元CBPeripheralManagerDelegate
测试CBPeripheralManager
。通常,为了消除外部类依赖项,我会使用依赖注入的一种形式,方法是通过类初始化程序或属性传入。在处理基于单例的 API 时,我已经能够使用 Kiwi 之类的库来存根返回单例的类级别方法(即[ClassName stub:@selector(sharedInstance) andReturn:myStubbedInstance]
)。模拟情况下的问题CBPeripheralManager
是它的初始化程序采用委托实例。所以任何使用我的类的代码都需要做这样的事情:
PeripheralManagerWrapper *wrapper = [[PeripheralManagerWrapper alloc] init];
CBPeripheralManager *peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:wrapper queue:nil options:nil];
wrapper.peripheralManager = peripheralManager;
然后,为了对我的PeripheralManagerWrapper
课程进行单元测试,我可以简单地实例化它并传入一个模拟的CBPeripheralManager
. 但是,我不喜欢我的包装对象的任何调用代码都必须通过此设置。有没有更好的模式来处理这种情况?我已经使用了 Kiwi 和 OCMockito,但似乎都没有提供这个功能,除非可能存根alloc
和init
方法,CBPeripheralManager
然后只是在PeripheralManagerWrapper
' 的初始化程序中实例化实例。