Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以代码块为参数的stub方法_Ios_Block_Stub_Ocmock - Fatal编程技术网

Ios 以代码块为参数的stub方法

Ios 以代码块为参数的stub方法,ios,block,stub,ocmock,Ios,Block,Stub,Ocmock,有没有一种方法可以使用以块为参数的存根方法?例如,方法: - (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler; 对。最简单的方法是接受任何东西: id mockGeocoder = [OCMockObject mockForClass:[CLGeocoder class]]; [[mockGeocoder stu

有没有一种方法可以使用以块为参数的存根方法?例如,方法:

- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;

对。最简单的方法是接受任何东西:

id mockGeocoder = [OCMockObject mockForClass:[CLGeocoder class]];
[[mockGeocoder stub] reverseGeocodeLocation:[OCMOCK_ANY] completionHandler:[OCMOCK_ANY]];
如果您想验证是否传入了特定的块,那么它会变得有点棘手。一个选项是使完成处理程序成为类的属性,在初始化类时初始化它,并让测试直接匹配它:

// in your class
@property(copy)CLGeocodeCompletionHandler completionHandler;

// in your class's init method
self.completionHandler = ^(NSArray *placemark, NSError *error) {
    //
}

// using the completion handler
[geocoder reverseGeocodeLocation:location completionHandler:self.completionHandler];

// the test
id mockGeocoder = [OCMockObject mockForClass:[CLGeocoder class]];
[[mockGeocoder stub] reverseGeocodeLocation:[OCMOCK_ANY] completionHandler:yourClass.completionHandler];

这将确保调用存根方法,但实际上不会对传入的块执行任何操作,对吗?是否有任何方法可以处理block参数,特别是运行它?我有一个非常类似的场景,但我希望我的模拟对象运行传入的块来完成测试。版本3的答案是什么?