Как выполнить модульное тестирование функций, которые асинхронно возвращают результаты в XCode? - PullRequest
1 голос
/ 08 декабря 2009

У меня есть что-то вроде

- (void)getData:(SomeParameter*)param
{
   // Remotely call out for data returned asynchronously
   // returns data via a delegate method
}


- (void)handleDataDelegateMethod:(NSData*)data
{
   // Handle returned data
}

Я хочу написать для этого модульный тест, как я могу сделать что-то лучше, чем

NSData* returnedData = nil;

- (void)handleDataDelegateMethod:(NSData*)data
{
   returnedData = data;
}

- (void)test
{
   [obj getData:param];
   while (!returnedData)
   {
      [NSThread sleep:1];
   }
   // Make tests on returnedData
}

Ответы [ 2 ]

1 голос
/ 08 декабря 2009

Если не удается отправить ложные данные обратно вашему делегату, как сказал Чак, вы можете сделать следующее:

  1. Сделайте ваш тест делегатом, чтобы он получает обратный вызов.

  2. Добавьте поля в ваш тестовый класс callBackInvoked и errorHasOccurred. Установите для них обоих значение NO.

  3. Позвоните на getData

  4. Обойдите главный цикл запуска, как следующим образом:

     NSDate *twoSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:2.0];
     while (!callBackInvoked && !errorHasOccured && runCount-- &&  [[NSRunLoop currentRunLoop]  runMode:NSDefaultRunLoopMode beforeDate:twoSecondsFromNow]) {
       twoSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:2.0];
      }
    

    (Вы можете установить runCount на количество раз, которое, по вашему мнению, было бы разумно подождать).

  5. В вашем handleDataDelegateMethod в классе теста установите для callBackInvoked значение YES. Точно так же, если у вас есть обратный вызов ошибки, вы можете установить errorHasOccured в YES.

  6. Затем ваш тест должен подтвердить, что callBackInvoked - это ДА, а erroHasOccurred - НЕТ.

1 голос
/ 08 декабря 2009
  1. Сделайте так, чтобы ваш объект вызывал макет из метода getData: и проверял, чтобы он вызывал правильно.

  2. Вызовите метод handleDelegateMethod: из другого теста с некоторыми готовыми данными и убедитесь, что он делает то, что должен делать с данными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...