NSInvocation类是不是要通过单元测试调用(对于iPhone)?
我的意图是一般调用一个类的方法,因为该方法有两个以上的参数,我不能使用[myTestClass performSelector:withObject:withObject]
相反,我正在尝试使用NSInvocation但是当我尝试从NSInvocation类实例化时,我得到了构建错误:
2009-12-31 11:12:16.380 otest [2562:903] *******关于打电话 NSInvocation的 /Developer/Tools/RunPlatformUnitTests.include: 第415行:2562总线错误
“$ {} THIN_TEST_RIG” “$ {} OTHER_TEST_FLAGS” “$ {} TEST_BUNDLE_PATH” /Developer/Tools/RunPlatformUnitTests.include:451: 错误:测试台 “/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/ iPhoneSimulator3.1.2.sdk /开发人员的/ usr / bin中/ otest” 代码138退出异常(它 可能已经崩溃了。)
我的课程测试:
@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个参数?这是单元测试框架的限制吗?
答案 0 :(得分:1)
NSInvocation应该在测试工具中正常工作。 SenTest根本不会捣乱它。
2562总线错误
这表示进程已崩溃。硬。
在调试器中运行测试工具并获取堆栈跟踪。副手,我建议您进行测试以确保sig
非零。
答案 1 :(得分:0)
您使用的是正确的选择器吗?你已经指出测试将在MyExampleClass中调用一个方法isTesting,没有参数......就像bbum notes一样,看起来很可能选择器不对,因此sig为nil然后调用创建就死了。你应该至少检查一下这种情况,如果是的话就不要打电话。
答案 2 :(得分:0)
上述失败的原因确实是由于选择器不正确。
我需要指定:“methodSignatureForSelector
”
instanceMethodSignatureForSelector
”
因为这些方法是实例方法。
但是,您的两个答案都有助于追踪问题。