2014-02-10 5 views
0

Я пытаюсь изменить существующий метод defaultTestSuite для создания класса, который может выбирать методы тестирования из разных классов и выполнять их в определенном порядке. Однако каждый раз, когда я импортировать тестовый файл в другой тестовый файл я получаю сообщение об ошибке компоновщикаСсылка на два или более SenTestCase

duplicate symbol _OBJC_METACLASS_$_TMKTestExample 

Почему это происходит с OCUnit, как я могу это исправить?

С уважением

+0

Эксплуатационные испытания должны быть автономными и не должны зависеть от рабочего порядка испытаний. Есть ли причина, по которой вам нужно это делать? – jrturton

+0

Я использую KIF, и я хотел повторно использовать собственные тестовые классы для выполнения тестовых потоков пользовательского интерфейса, вместо того чтобы писать тестовый код снова и снова. – RicardoDuarte

ответ

0

Я нашел решение, создав свои собственные 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., А затем повторно использовать методы для создания тестов потока, регрессионные тесты пользовательского интерфейса, из кода или из сценариев (все еще выполняющих последние). - обычные тестовые классы.

Я надеюсь, что это поможет любому, кто нуждается в этом очень конкретном требовании.

Что касается исходного вопроса, я не понял его, мне интересно, есть ли способ.

0

Проверить ваши TMKTestExample «ы Цель членства, он не должен быть включен как основной цели и цели модульного тестирования.

+0

У меня это было только в целевой тестовой единице – RicardoDuarte