ios - stub 方法不适用于 OCMock3.4

标签 ios objective-c unit-testing ocmock

Stubbing Methods 与“NSUserDefaults”配合使用效果很好,但它似乎不适用于“我的自定义方法”。

我的测试代码如下:

- (void)testExample 
{
    id userDefaultMock = OCMClassMock([NSUserDefaults class]);
    OCMStub([userDefaultMock standardUserDefaults]).andReturn(userDefaultMock);
    OCMStub([userDefaultMock objectForKey:[OCMArg any]]).andReturn(@"user defaults mock obj");


    id managerMock = OCMClassMock([ViewManager class]);
    OCMStub([managerMock sharedInstance]).andReturn(managerMock);
    OCMStub([managerMock generateObjWithObj:[OCMArg any]]).andReturn(@(11));

    ViewController *vc = [[ViewController alloc]init];
    [vc publicMethod];

}

ViewController 中的代码:

- (void)publicMethod
{
    [[NSUserDefaults standardUserDefaults]setObject:@"mockObj" forKey:@"mockObjKey"];
    id obj = [[NSUserDefaults standardUserDefaults]objectForKey:@"mockObjKey"];
    NSLog(@"mockObjKey:%@",obj);

    NSNumber *num = @(0);
    NSNumber *i = [[ViewManager sharedInstance] generateIndexWithNumber:num];
    NSLog(@"i expected to be 1, actual :%ld",i.integerValue);
}

ViewManager 中的代码:

static ViewManager *sharedViewManager = nil;

+ (id)sharedInstance
{
    if (nil == sharedViewManager)
    {
        sharedViewManager = [[ViewManager alloc]init];
    }
    return sharedViewManager;
}
- (NSNumber *)generateIndexWithNumber:(NSNumber *)index
{
    NSLog(@"generateIndexWithNumber:%ld",index.integerValue);
    return @(index.integerValue + 1);
}

控制台输出如下:

2017-07-03 10:12:25.812 OC_Unit[2214:64454] mockObjKey:user defaults mock obj
2017-07-03 10:12:25.812 OC_Unit[2214:64454] generateIndexWithNumber:0
2017-07-03 10:12:25.812 OC_Unit[2214:64454] i expected to be 1, actual :1

如果 shubbing 方法有效,最后一行输出应该是 'i expected to be 1, actual :11'。我想知道,为什么它没有按预期输出。

最佳答案

看起来您正在 stub generateObjWithObj: 但代码正在调用 generateIndexWithNumber:

关于ios - stub 方法不适用于 OCMock3.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44876987/

相关文章:

c# - Xamarin 表格和 map - 在 map 上获取坐标,创建路线?

ios - UIView 在 UIScrollview 中不移动

symfony - 如何对控制台的命令输入验证器进行功能测试

unit-testing - 如何使用 dart mockito 模拟索引运算符?

ios - 为什么 Swift 4 显示键盘时 stackview 会在 3 秒后消失?

ios - 以小于其固有尺寸的尺寸显示 UIImageView

ios - Swift3 中心 UIbutton

ios - 没有 Unicode 的自定义 iOS 表情符号键盘

objective-c - 如何在 OS X 中调试屏幕保护程序

node.js - 使用mockery模拟fs模块