Iphone 从SenTestCase派生类调用NSInvocation不可行?
NSInvocation类是否不打算通过单元测试调用(对于iPhone) 我的目的是一般地调用类的方法,因为该方法有两个以上的参数,所以我不能使用Iphone 从SenTestCase派生类调用NSInvocation不可行?,iphone,objective-c,ocmock,Iphone,Objective C,Ocmock,NSInvocation类是否不打算通过单元测试调用(对于iPhone) 我的目的是一般地调用类的方法,因为该方法有两个以上的参数,所以我不能使用[myTestClass performSelector:withObject:withObject] 相反,我正在尝试使用NSInvocation,但一旦我尝试从NSInvocation类实例化,就会出现生成错误: 2009-12-31 11:12:16.380 otest[2562:903]*********即将打电话 非侵入 /开发者/工具/运行
[myTestClass performSelector:withObject:withObject]
相反,我正在尝试使用NSInvocation,但一旦我尝试从NSInvocation类实例化,就会出现生成错误:
2009-12-31 11:12:16.380
otest[2562:903]*********即将打电话
非侵入
/开发者/工具/运行平台单元测试。包括:
第415行:2562总线错误“${THIN_TEST_RIG}” “${其他测试标志}” “${TEST\u BUNDLE\u PATH}” /开发者/工具/运行平台单元测试。包括:451: 错误:测试台 “/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/ iPhoneSimulator3.1.2.sdk/Developer/usr/bin/otest' 异常退出,代码为138(it) 可能已经坠毁了) 我的测试班:
@implementation MyExampleClass
-(void)methodWithArgs:(NSString *)aValue
secondParam:(NSString *)aSecond
thirdParam:(NSString *)aThird
{
NSLog(@"methodWithArgs reached");
}
-(void)methodBlank
{
NSLog(@"methodBlank reached");
}
-(void)isTesting
{
NSLog(@"isTesting reached");
}
@end
我的单元测试:
@interface MyClassTests : SenTestCase
{
}
@end
@implementation MyClassTests
- (void)testNSInvocation
{
Class probeClass = NSClassFromString(@"MyExampleClass");
if (probeClass != Nil) {
SEL selector = NSSelectorFromString(@"isTesting");
NSMethodSignature *sig = [probeClass methodSignatureForSelector:selector];
// the following line causes the error
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];
// this variation also fails
NSMethodSignature *sig2 = [probeClass
methodSignatureForSelector:@selector(methodWithArgs:secondParam:thirdParam:)];
NSInvocation *inv2 = [NSInvocation invocationWithMethodSignature:sig2];
}
}
@end
在运行时调用具有2个以上参数的方法的方法是什么?我是否必须更改方法的签名,使其只有2个参数?这是单元测试框架的一个限制吗?n在测试线束中,隔离应该可以正常工作。SenTest一点也不在乎 2562总线错误 这表示进程已崩溃。很难
在调试器中运行测试线束并获取堆栈跟踪。首先,我建议您进行测试,以确保
sig
为非零。您是否使用了正确的选择器?您已经指出测试将在MyExampleClass中调用一个方法ISTest,不带任何参数。。。和bbum注释一样,选择器似乎不正确,因此sig为nil,然后调用创建终止。您至少应该检查这种情况,如果是这样,就不要调用。上述失败的原因确实是由于选择器不正确
我需要指定:“实例methodSignatureForSelector
”,而不是使用“方法签名ForSelector”
因为这些方法都是实例方法
但是,您的两个答案都有助于追踪问题。我添加了代码来显示我的测试类的外观——我认为我正确地调用了选择器,并尝试了第二个选择器,该选择器引用了具有多个参数的方法。它们都会产生错误(当我尝试另一个时,其中一个会被注释掉)