我想对一个作为
然后,为了对我的
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,但除了可能对CBPeripheralManager
的alloc
和init
方法进行存根,然后在PeripheralManagerWrapper
的初始化器中实例化该实例之外,它们似乎都没有提供这种功能。