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的答案是什么?