不能存根方法([NSData initWithBase64EncodedString])

时间:2015-06-24 18:01:11

标签: objective-c ocmock

我是Objective-C和OCMock的新手。我创建了这个简单的测试并期望它通过,但它失败了:

-(void)testMock
{
    id dataMock = [OCMockObject niceMockForClass:[NSData class]];
    [[[dataMock stub] andReturn:dataMock] initWithBase64EncodedString:[OCMArg any]
         options:[OCMArg any]];

    NSData *ret = [dataMock initWithBase64EncodedString:@"dGVzdA==" 
        options:NSDataBase64DecodingIgnoreUnknownCharacters];
    XCTAssertEqualObjects(dataMock, ret);
}

如您所见,我存根一个方法并命令它返回dataMock,但它返回null:

Assertions:  ((dataMock) equal to (ret)) failed: 
    ("OCMockObject(NSData)") is not equal to ("(null)")

注意:使用init代替initWithBase64EncodedString进行测试,按预期工作并通过。

我正在使用XCode 6.0.1和iOS 8.0编程。

1 个答案:

答案 0 :(得分:0)

我发现这是OCMock中匹配原语的着名问题。在上述方法中options采用原语,[OCMArg any]与之匹配。

所以现在我要使用确切的使用价值:

[[[dataMock stub] andReturn:dataMock] initWithBase64EncodedString:[OCMArg any]
     options:NSDataBase64DecodingIgnoreUnknownCharacters];