0

逆ジオコーディングを使用する方法をテストしたいと思います。私がやりたいことは次のとおりです。

  • コントローラーのプロパティとしてジオコーダーを設定する

  • init メソッドでジオコーダーを作成する

  • テストしたいメソッドでジオコーダーを呼び出す

  • 私のテストでジオコーダーをモックに置き換えます

問題は、MKReverseGeocoder 座標プロパティが読み取り専用であることです。コンストラクター メソッドでのみ設定できます。

[[MKReverseGeocoder alloc] initWithCoordinate:coord]

そしてもちろん、座標はテストしたいメソッドでのみ利用できます..

MKReverseGeocoder クラスをモックする方法を知っている人はいますか?

前もってありがとう、ヴィンセント。

4

1 に答える 1

0

Cocoa アプリケーションの単体テストに関する Matt Gallagher の素晴らしい記事をご覧ください。彼は、テスト時にインスタンスを置き換えることを可能にするカテゴリ拡張を NSObject に提供しています。私はそれを使って似たようなことをしました。あなたのテストは次のようになると思います:

#import "NSObject+SupersequentImplementation.h"

id mockGeocoder = nil;

@implementation MKReverseGeocoder (UnitTests)

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate {
   if (mockGeocoder) {
      // make sure the mock returns the coordinate passed in
      [[[mockGeocoder stub] andReturn:coordinate] coordinate];
      return mockGeocoder;
   }
   return invokeSupersequent(coordinate);
}

@end

...

-(void) testSomething {
   mockGeocoder = [OCMockObject mockForClass:[MKReverseGeocoder class]];
   [[mockGeocoder expect] start];

   // code under test
   [myObject geocodeSomething];

   [mockGeocoder verify];
   // clean up
   mockGeocoder = nil;
}
于 2010-05-07T18:26:04.043 に答える