无法存根方法([NSData initWithBase64EncodedString])

Cannot stub a method ([NSData initWithBase64EncodedString])

我是 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);
}

如您所见,我存根了一个方法并将其命令为 return dataMock,但它 return 为 null:

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

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

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

我发现这是 OCMock 中著名的原语匹​​配问题。 options 在提到的方法中,取一个原语并且 [OCMArg any] 不匹配它。

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

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