我正在学习OCMock for iOS测试. “类模拟”和“部分模拟”之间有什么区别,什么时候应该使用一个与另一个?
解决方法
类模拟创建的对象是类实例的纯模型.
部分模拟采用类的实例,允许您存根其任何方法.
假设我有这些类:
@interface Foo : NSObject - (void)doX; @end @implementation - (void)doX { NSLog(@"X"); } @end @interface Bar : NSObject - (void)doA:(Foo *)foo; - (void)doB; @end @implementation Bar - (void)doA:(Foo *)foo { NSLog(@"A"); [foo doX]; [self doB]; } - (void)doB { NSLog(@"B"); } @end
我有兴趣测试Bar的doA:方法.我希望它在Foo对象上调用doX,然后调用它自己的doB方法.我将使用Foo的类模拟和Bar的部分模拟来实现它.
- (void)test_doA_shouldCall_doX_and_doB { id objectUnderTest = [OCMockObject partialMockForObject:[Bar new]]; id fooMock = [OCMockObject mockForClass:Foo.class]; [[fooMock expect] doX]; [[objectUnderTest expect] doB]; // Make the call [objectUnderTest doA:fooMock]; [objectUnderTest verify]; [fooMock verify]; }
你在这里看到我的部分模拟允许我调用我想要测试的真实方法,同时模拟对其另一个实例方法的内部调用.因为我不需要Foo的任何实际功能,所以我使用了类mock.