我使用dispatch_once()创建了一个单例类MyManager:
@implementation MyManager+ (ID)sharedInstance { static MyManager *sharedMyManager = nil; static dispatch_once_t oncetoken; dispatch_once(&oncetoken,^{ sharedMyManager = [[self alloc] init]; }); return sharedMyManager;}
我在School类中有一个使用上面的单例的方法:
@implementation School...- (voID) createLecture { MyManager *mgr = [MyManager sharedInstance]; [mgr checkLectures]; ...}@end
现在,我想对这个方法进行单元测试,我使用MyManager的局部模拟:
- (voID) testCreateLecture { // create a partially mocked instance of MyManager ID partialMockMgr = [OcmockObject partialMockForObject:[MyManager sharedInstance]]; // run method to test [schoolToTest createLecture]; ...}
我注意到使用Ocmock,在我创建了我的单例MyManager实例的部分模拟后,当运行我的测试方法时,它会自动使用部分模拟的实例.
这对我来说有点奇怪,因为在上面的测试用例中,我只创建了MyManager实例的部分模拟,而没有将它注入到MyManager类中,
当在测试代码中调用[MyManager sharedInstance]时,Ocmock如何自动强制测试中的代码使用此模拟实例?有人可以向我解释一下吗?
解决方法 partialMockForObject模拟传递给它的对象.在这种情况下,您正在模拟单例(共享)对象.您不必注入任何东西,因为sharedInstance总是返回相同的对象,现在被模拟.它仍然是相同的参考.
想象一下,部分模拟是传递对象的简单变形,它不会创建新实例,因此您不必在此特定情况下注入它.
总结以上是内存溢出为你收集整理的ios – OCMock会在被测代码中自动使用模拟实例吗?全部内容,希望文章能够帮你解决ios – OCMock会在被测代码中自动使用模拟实例吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)