无法使用OCMock模拟CLBeacon

时间:2014-07-01 20:41:33

标签: ios ibeacon cllocation ocmock

我正在尝试模拟CLBeacon对象,以便测试特定类型信标的应用行为。但是我很难将方法接近度存根以从中返回所需的接近值。

以下是有问题的代码:

id clBeacon = [OCMockObject niceMockForClass:[CLBeacon class]];

[[[clBeacon stub] andReturn:@"2"] major];
[[[clBeacon stub] andReturn:@"0"] minor];

[[[clBeacon stub] andReturnValue: OCMOCK_VALUE(CLProximityNear)] proximity]; // Didn't work

[[[clBeacon stub] andReturn: @""] proximity]; // Didn't work

以上代码在我尝试存根接近响应时引发了以下问题。

Multiple methods named 'proximity' found with mismatched result, parameter or attributes

有人能指出我上面代码的确切问题吗?

问候。

3 个答案:

答案 0 :(得分:0)

proximity属性不是字符串,而是CLProximity typedef。

typedef NS_ENUM(NSInteger, CLProximity) {
    CLProximityUnknown,
    CLProximityImmediate,
    CLProximityNear,
    CLProximityFar
} NS_ENUM_AVAILABLE_IOS(7_0);

尝试这样的事情:

[[[clBeacon stub] andReturn: @(CLProximityImmediate)] proximity]; // Didn't work

您还应该传入主要和次要值的NSNumber对象而不是字符串


修改

你是否也尝试过这样的事情:

id clBeacon = [OCMockObject partialMockForObject:[CLBeacon new]];

答案 1 :(得分:0)

我已经确定了实际问题所在。

所以,我还有另外两个具有邻近属性但类型不同的类(一个是CLProximity,另一个是NSString),所以在选择正确的类时会有冲突。

答案 2 :(得分:0)

您可以使用CLBeacon而非id声明。

CLBeacon *clBeacon = [OCMockObject niceMockForClass:[CLBeacon class]];