iOS OCMock部分vs类模拟

我正在学习Ocmock for iOS测试. “类模拟”和“部分模拟”之间有什么区别,什么时候应该使用一个与另一个

http://ocmock.org/features/

解决方法

模拟创建的对象是类实例的纯模型.

部分模拟采用类的实例,允许您存根其任何方法.

假设我有这些类:

@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.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...