我正在学习用于 iOS 测试的 OCMock。“类模拟”和“部分模拟”有什么区别,什么时候应该使用一个与另一个?
问问题
4345 次
1 回答
14
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 的任何真正功能,所以我使用了类模拟。
于 2013-08-18T02:05:43.437 回答