我想测试一种使用反向地理编码的方法。我想做的是:
将地理编码器设置为我的控制器的属性
在init方法中创建地理编码器
在我想测试的方法中调用地理编码器
在我的测试中用模拟替换地理编码器
问题是MKReverseGeocoder坐标属性是只读的,我只能在构造函数方法中设置它:
[[MKReverseGeocoder alloc] initWithCoordinate:coord]
当然,坐标仅在我想测试的方法中可用..
有谁知道我如何模拟MKReverseGeocoder类?
提前致谢, 文森特。
答案 0 :(得分:0)
结帐Matt Gallagher's great article on unit testing Cocoa applications。他为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;
}