我正在尝试使用XCode 5和相应的测试模板为我的iOS应用编写一些测试用例。我的应用程序使用IAP,我无法在模拟器中测试 - 但我希望能够在模拟器上运行测试(我确实有设备,但这对我来说不是这样)。
假装我有这个:
// IAPController.m
-(void)aFunction:(NSObject*)aParam
{
// do something
}
请注意,IAPController.h中未声明aFunction。
如何在我的测试用例(导入IAPController.h)中调用此函数而不管其“匿名”性质如何?我的意思是我知道函数在那里,我知道Obj-C并不真正支持私有函数,但仍然(使用ARC ......)它基本上不允许我这样做。 我试图利用NSInvocation,这是正确的方向吗?
答案 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];