Цель C - Модульное тестирование блока dispatch_async?

Я читаю другие посты, которые предлагают решения этого вопроса. Однако их решения требуют добавления хакерского кода в мое приложение, чтобы можно было его протестировать. Для меня чистый код важнее модульного теста.

Я регулярно использую dispatch_async в своем приложении, и у меня возникают проблемы с его модульным тестированием. Проблема заключается в том, что блок выполняется после того, как мой тест уже завершен, поскольку он выполняется асинхронно в основной очереди. Есть ли способ как-то дождаться выполнения блока, а затем продолжить тестирование.

I DON'T want to pass a completion to the block only because of unit-testing

- (viod)viewDidLoad
{
   [super viewDidLoad];

   // Test passes on this
   [self.serviceClient fetchDataForUserId:self.userId];


   // Test fails on this because it's asynchronous
   dispatch_async(dispatch_get_main_queue(), ^{
      [self.serviceClient fetchDataForUserId:self.userId];
   });
}

- (void)testShouldFetchUserDataUsingCorrectId
{
   static NSString *userId = @"sdfsdfsdfsdf";
   self.viewController.userId = userId;
   self.viewController.serviceClient = [[OCMockObject niceMockForClass:[ServiceClient class]];

   [[(OCMockObject *)self.viewController.serviceClient expect] fetchDataForUserId:userId];
   [self.viewController view]; 
   [(OCMockObject *)self.viewController.serviceClient verify];
}

Ответы на вопрос(3)

Ваш ответ на вопрос