5

パラメータとしてブロックを取るメソッドをスタブする方法はありますか? たとえば、方法:

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

1 に答える 1

6

はい。最も簡単な方法は、何でも受け入れることです。

id mockGeocoder = [OCMockObject mockForClass:[CLGeocoder class]];
[[mockGeocoder stub] reverseGeocodeLocation:[OCMOCK_ANY] completionHandler:[OCMOCK_ANY]];

特定のブロックが渡されたことを確認したい場合は、少しトリッキーになります。 1 つのオプションは、完了ハンドラーをクラスのプロパティにし、クラスを初期化するときに初期化し、テストを直接一致させることです。

// 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];
于 2012-05-29T17:54:22.280 に答える