如何在Objective C中存根超类方法

时间:2015-09-15 09:02:18

标签: ios objective-c mocking ocmock stubbing

我正在编写一个班级的单元测试。这个类(比如子类)继承自其他一些类(即父类)。在子类的一种方法中,它使用[super someMethod]调用其父类的方法。我已经部分模拟了子类,并希望存根父类方法。所以当调用[super someMethod]而不是去父类方法时,它会在我的测试类中找到stubbed方法。任何人都可以帮助我吗?

这是我正在编写测试用例的类的公共接口。它继承自设备管理器。

@interface BTDeviceManager : DeviceManager<MGBTDeviceDelegate>

+ (id) sharedInstance;
- (void)startConnection;

@property (nonatomic,weak) id <MGBTDeviceDelegate> deviceDelegate;

@end

设备管理器有一个名为:

的方法
- (void) startDiscoveryWithServices:(NSArray *)serviceUUIDs

我正在尝试存根这个从BTDeviceManager调用的方法。

我的测试类是这样的:

 @implementation BTDeviceManagerTest

           - (void)setUp {
                [super setUp];
                deviceManager = [[BTDeviceManager alloc]init];
                deviceManager.deviceManagerDelegate = self;
                deviceManagerMock = OCMPartialMock(deviceManager);
            }

            - (void)testStartConnection
            {
            NSArray *testShaverServiceUUIDs = @[@"C222"];
            //This is how i am trying to stub the superclass method
            OCMStub([deviceManagerMock startDiscoveryWithServices:testShaverServiceUUIDs]).andCall(self, @selector(handleStartDiscoveryWithServices:));
            [deviceManagerMock startConnection];
        }
@end

1 个答案:

答案 0 :(得分:0)

所以你要做的就是模拟父类并在那里存根。所以,在你的情况下,你是在嘲笑DeviceManager,那么当孩子进行那次调用时,它会转而去模拟。