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

    上一篇: OCmock and MKReverseGeocoder

    下一篇: MKErrorDomain error 4 iPhone