我正在学习OCMock for iOS测试。 “类模拟”和“部分模拟”之间有什么区别,什么时候应该使用哪一个?
答案 0 :(得分:13)
Class mocks
创建对象类实例的纯模拟对象。
Partial mocks
获取类的实例,允许您存根其任何方法。
假设我有这些课程:
@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:
方法很感兴趣。我希望它在doX
对象上调用Foo
,然后调用自己的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。