0

我想测试一种使用反向地理编码的方法。我想做的是:

  • 将地理编码器设置为我的控制器的属性

  • 在 init 方法中创建地理编码器

  • 在我要测试的方法中调用地理编码器

  • 在我的测试中用模拟替换地理编码器

问题是 MKReverseGeocoder 坐标属性是只读的,我只能在构造函数方法中设置它:

[[MKReverseGeocoder alloc] initWithCoordinate:coord]

当然,坐标仅在我想测试的方法中可用..

有谁知道我如何模拟 MKReverseGeocoder 类?

在此先感谢文森特。

4

1 回答 1

0

查看Matt Gallagher 关于单元测试 Cocoa 应用程序的精彩文章。他为 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 回答