Emalwb
Emalwb

Reputation: 1

Stubbing Methods does not work with OCMock3.4

Stubbing Methods works nicely With 'NSUserDefaults',but it just doesn't seem to work with My Custom Method.

My test code is as follows:

- (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];

}

code in 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);
}

code in 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);
}

and console output is as follows:

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

The last line of output should be 'i expected to be 1, actual :11' if shubbing methods works. I'm wondering,why does it not output as expected。

Upvotes: 0

Views: 161

Answers (1)

Erik Doernenburg
Erik Doernenburg

Reputation: 3014

It looks like you are stubbing generateObjWithObj: but the code is calling generateIndexWithNumber:.

Upvotes: 1

Related Questions