Я нашел решение, создав свои собственные NSInvocations в методе testInvocation, который принадлежит SenTestCase.
В основном у меня есть пустой тестовый класс, в котором я бросаю методы тестирования, которые выполняют некоторые действия (для тестирования потока), которые устанавливаются в каждом NSInvocation, после запуска теста методы будут выполняться в том же порядке, что и существующие в статическом методе testInvocation, и это позволяет добавить столько методов, насколько это возможно, в чем-то подобным сырой примере ниже:
расширить класс SenTestCase
- (id) initWithInvocation:(NSInvocation *)anInvocation
{
id invocationTarget = anInvocation.target;
self = [super initWithInvocation:anInvocation];
if (!self) {
return nil;
}
if (invocationTarget != nil && invocationTarget != self) {
anInvocation.target = invocationTarget;
}
return self;
}
необходимо переопределить метод выше, потому что цель всегда будет установлена в self в методе супер initWithInvocation.
+(NSArray *) testInvocations
{
NSMutableArray *invocations = (NSMutableArray *)[super testInvocations];
TMKTestFirstViewControllerBaseAction *baseAction = [TMKTestFirstViewControllerBaseAction sharedInstance];
for (int i=0; i<4; i++) {
NSInvocation *invocation = nil;
switch (i) {
case 3:{
invocation = [NSInvocation invocationWithTarget:baseAction selector:@selector(tapChangeBackgroundButton)];
break;
}
case 2:{
invocation = [NSInvocation invocationWithTarget:baseAction selector:@selector(tapChangeBackgroundButton)];
break;
}
case 0:{
invocation = [NSInvocation invocationWithTarget:baseAction selector:@selector(tapBarButtonWithAccessibilityLabel:)];
NSString *arg = @"Second";
[invocation setArgument:&arg atIndex:2];
break;
}
case 1:{
invocation = [NSInvocation invocationWithTarget:baseAction selector:@selector(tapBarButtonWithAccessibilityLabel:)];
NSString *arg = @"First";
[invocation setArgument:&arg atIndex:2];
break;
}
default:
break;
}
[invocation retainArguments];
NSLog(@"invocation target: %d target: %@", i,invocation.target);
[invocations insertObject:invocation atIndex:i+1];
}
return invocations;
}
В приведенном выше примере только добавляет один тест, но можно увидеть, что я имею в виду, это было взято из примеров этих сайтов:
Используя оба этих метода и управляя порядком тестов, я могу создать для KIF следующее: - Классы, описывающие действия для тестирования в определенном UIViewController/UIView/etc., А затем повторно использовать методы для создания тестов потока, регрессионные тесты пользовательского интерфейса, из кода или из сценариев (все еще выполняющих последние). - обычные тестовые классы.
Я надеюсь, что это поможет любому, кто нуждается в этом очень конкретном требовании.
Что касается исходного вопроса, я не понял его, мне интересно, есть ли способ.
Эксплуатационные испытания должны быть автономными и не должны зависеть от рабочего порядка испытаний. Есть ли причина, по которой вам нужно это делать? – jrturton
Я использую KIF, и я хотел повторно использовать собственные тестовые классы для выполнения тестовых потоков пользовательского интерфейса, вместо того чтобы писать тестовый код снова и снова. – RicardoDuarte