无法使用OCMock存储[CLLocationManager AuthorizationStatus]

时间:2016-04-01 19:44:38

标签: ios objective-c unit-testing cllocationmanager ocmock

我尝试了存根AuthorizationStatus,但无论我做什么,它都会返回kCLAuthorizationStatusResticted。

OCMStub([CLLocationManager authorizationStatus]).andReturn(kCLAuthorizationStatusAuthorizedAlways);

我做错了什么?

1 个答案:

答案 0 :(得分:2)

通常,您不会发送存根调用实际类或实例。在这种情况下,当您应该在模拟上存根调用时,您正在对类调用存根。您将不得不创建一个类mock,然后在mock上存根方法调用。

一个简单的例子:

id locationManagerMock = OCMClassMock([CLLocationManager class]);
OCMStub([locationManagerMock authorizationStatus]).andReturn(kCLAuthorizationStatusAuthorizedAlways);

// Now this will pass!
XCTAssertEqualObjects([CLLocationManager authorizationStatus], kCLAuthorizationStatusAuthorizedAlways);

如果您想了解更多信息,可以在OCMock的Mocking class methods参考资料中找到一个几乎相同的示例和稍微深入的解释。参考文献中的部分有点简短,但尽管如此,它简明扼要地解释了框架以及何时应该使用它。