2015-06-24 30 views
1

我是Objective-C和OCMock的新手。我創造了這個小測試,並期望它來傳遞,但它失敗:不能存根方法([NSData initWithBase64EncodedString])

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

我發現這是在OCMock中匹配原語的着名問題。 options在提到的方法中,採用一個原語並且與[OCMArg any]不匹配。

所以現在我與使用完全值會:

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