在objective-c中调用非接口函数

时间:2014-10-01 18:43:54

标签: objective-c

我正在尝试使用XCode 5和相应的测试模板为我的iOS应用编写一些测试用例。我的应用程序使用IAP,我无法在模拟器中测试 - 但我希望能够在模拟器上运行测试(我确实有设备,但这对我来说不是这样)。

假装我有这个:

// IAPController.m
-(void)aFunction:(NSObject*)aParam
{
   // do something
}

请注意,IAPController.h中未声明aFunction。

如何在我的测试用例(导入IAPController.h)中调用此函数而不管其“匿名”性质如何?我的意思是我知道函数在那里,我知道Obj-C并不真正支持私有函数,但仍然(使用ARC ......)它基本上不允许我这样做。 我试图利用NSInvocation,这是正确的方向吗?

3 个答案:

答案 0 :(得分:1)

由于您需要将方法公开给测试类,因此可能的解决方案之一是将类扩展中的那些方法单独声明为#34; protected"头文件:

// IAPController_protected.h
@interface IAPController()
-(void)aFunction:(NSObject*)aParam;
@end

仅在测试文件中导入该方法。这样你就可以清楚地分开公共界面和" protected"单元测试所需的接口。

答案 1 :(得分:0)

您可以使用

- (id)performSelector:(SEL)aSelector
       withObject:(id)anObject

如果方法的参数是对象,否则使用NSInvocation。

答案 2 :(得分:0)

SEL selector = NSSelectorFromString(@"aFunction:");
IAPController *controller = [IAPController new];
NSObject *aParam = [NSObject new];
[controller performSelector:selector withObject:aParam];