有没有办法调用一个nil
作为给定参数的块,假设invokeBlockWithArgs:
要求args被终止为空?
模拟对象中的示例方法定义:
- (void)methodWithCompletion:(void(^)(NSString*, NSError* )) completionBlock;
给定的mockObject应该调用:
completionBlock(@"foo", nil);
然而,invokeBlockWithArgs
:
OCMStub([mockObj methodWithCompletion:([OCMArg invokeBlockWithArgs:@"foo", nil, nil])]);
方法失败,参数太少;显然nil是终止,它不能识别块的第二个参数应该是nil
。
答案 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]。我刚刚测试过,它有效。