OCmock和MKReverseGeocoder
我想测试一种使用反向地理编码的方法。 我想要做的是:
将地理编码器设置为我的控制器的属性
在init方法中创建地理编码器
在我想要测试的方法中调用地理编码器
用我的测试中的模拟替换地理编码器
问题是MKReverseGeocoder坐标属性是只读的,我只能在构造函数方法中设置它:
[[MKReverseGeocoder alloc] initWithCoordinate:coord]
当然,坐标只在我想测试的方法中可用。
有谁知道我可以如何嘲笑MKReverseGeocoder类?
在此先感谢,文森特。
查看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;
}
链接地址: http://www.djcxy.com/p/18299.html