使用nil参数的ocmock的invokeBlockWithArgs

时间:2016-08-02 21:59:28

标签: ocmock

有没有办法调用一个nil作为给定参数的块,假设invokeBlockWithArgs:要求args被终止为空?

模拟对象中的示例方法定义:

- (void)methodWithCompletion:(void(^)(NSString*, NSError* )) completionBlock;

给定的mockObject应该调用:

completionBlock(@"foo", nil);

然而,invokeBlockWithArgs

OCMStub([mockObj methodWithCompletion:([OCMArg invokeBlockWithArgs:@"foo", nil, nil])]);

方法失败,参数太少;显然nil是终止,它不能识别块的第二个参数应该是nil

3 个答案:

答案 0 :(得分:7)

我还没有测试过,但理论上传递[NSNull null]应该有用。

答案 1 :(得分:1)

在此处添加现有答案,在这种情况下,传递[NSNull null]会执行您想要的操作,即将nil作为参数传递。

我有一个案例(如下所示)我的逻辑测试了错误对象的存在或者我的数组是空的,并希望我的测试覆盖两种情况并且害怕我&#d; d只能测试一个案例

if (error || array.count == 0) { // fail here }

这是我的测试OCMock代码:

NSArray *emptyArray = @[]; OCMStub([requestMock loadListWithCompletion:([OCMArg invokeBlockWithArgs:emptyArray, [NSNull null], nil])]);

...并且在该方法的实际调用中,错误参数(我通过[NSNull null])确实是nil,因此逻辑落到了空数组和错误情况还在处理。

答案 2 :(得分:0)

您可以传递[NSNull null]。我刚刚测试过,它有效。