解决方法
类模拟创建的对象是类实例的纯模型.
部分模拟采用类的实例,允许您存根其任何方法.
假设我有这些类:
@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.