Класс NSInvocation не предназначен для вызова через модульные тесты (для iPhone)?Невозможно вызвать NSInvocation из производного класса SenTestCase?
Моя цель заключается в вызове метода класса за обобщенно и поскольку метод имеет более 2-х параметров, я не могу использовать [myTestClass performSelector:withObject:withObject]
Вместо этого я пытаюсь использовать NSInvocation, но как только я пытаюсь создать экземпляр из класса NSInvocation, я получаю ошибку компиляции:
2009-12-31 11:12:16.380 otest[2562:903] ******* ABOUT TO CALL NSInvocation /Developer/Tools/RunPlatformUnitTests.include: line 415: 2562 Bus error
"${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}" /Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/ iPhoneSimulator3.1.2.sdk/Developer/usr/bin/otest' exited abnormally with code 138 (it may have crashed).
Мой класс под тест:
@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 параметра? Является ли это ограничением рамки единичного тестирования?
Рад, что вы это поняли! –