在OCMockito中使用pass-by-reference的stubbing方法时出现异常

时间:2014-02-28 20:52:55

标签: ios pass-by-reference nsjsonserialization ocmockito

我正在尝试使用OCMockito来存根NSJSONSerialization方法。我以为我有一个解决方案,但事实证明它导致了这个例外:

  

*** - [__ NSArrayM objectAtIndex:]:索引2超出界限[0 .. 1]

这就是我在做的事情:

Class mockClass = MKTMockClass([NSJSONSerialization class]);

MKTOngoingStubbing *stubStepOne = MKTGiven([mockClass JSONObjectWithData:nil options:0 error:nil]);
id stubStepTwo = [stubStepOne withMatcher:anything() forArgument:1];
id stubStepThree = [stubStepTwo withMatcher:anything() forArgument:2];

[stubStepThree willReturn:mock([NSDictionary class])];

我猜测问题在于错误参数,因为那意味着通过引用传递,我不相信我曾经尝试过这样的东西。有谁知道让这个工作的方法?

这里的目标是让+[NSJSONSeralization JSONObjectWithData:option:error]方法在从我的测试中调用时始终返回一个模拟NSDictionary。

2 个答案:

答案 0 :(得分:1)

我之前没有使用过OCMockito(最近一直在使用OCMock)所以这只是猜测,但你只是错过了第三个参数吗?

看起来OCMockito正在寻找数组中的第三个对象,看起来你只设置了两个参数。

如果你替换它是否有效:

[stubStepThree willReturn:mock([NSDictionary class])];

id stubStepFour = [stubStepThree withMatcher:anything() forArgument:3];
[stubStepFour willReturn:mock([NSDictionary class])];

答案 1 :(得分:1)

OCMockito 1。2。0(2014年4月5日发布)现在支持指针参数,包括NSError **。

release notes中的更多信息。