我是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编程。
答案 0 :(得分:0)
我发现这是OCMock中匹配原语的着名问题。在上述方法中options
采用原语,[OCMArg any]
与之匹配。
所以现在我要使用确切的使用价值:
[[[dataMock stub] andReturn:dataMock] initWithBase64EncodedString:[OCMArg any]
options:NSDataBase64DecodingIgnoreUnknownCharacters];