首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCmock和MKReverseGeocoder

OCmock和MKReverseGeocoder
EN

Stack Overflow用户
提问于 2010-05-04 15:34:00
回答 1查看 408关注 0票数 0

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

  • 将地理编码器设置为我的控制器的属性
  • 在init方法中创建地理编码器
  • 在我想要测试的方法中调用Geo编码器
  • 在我的测试中用模拟替换Geo编码器

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

代码语言:javascript
复制
[[MKReverseGeocoder alloc] initWithCoordinate:coord]

当然,坐标只适用于我想要测试的方法。

有人知道我怎么能嘲笑MKReverseGeocoder类吗?

提前谢谢文森特。

EN

回答 1

Stack Overflow用户

发布于 2010-05-07 18:26:04

看看Matt Gallagher关于Cocoa应用程序单元测试的优秀文章。他为NSObject提供了一个类别扩展,允许您在测试时替换实例。我也用它做过类似的事。我想你的测试会是这样的:

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2766701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档