Я читал другие сообщения, которые придумывают решения этого вопроса. Тем не менее, их решения требуют, чтобы хеш-код был добавлен в мое приложение, чтобы проверить его. Для меня чистый код более важен, чем модульный тест.Цель C - Блокировать модуль dispatch_async?
Я регулярно использую dispatch_async в своем приложении, и у меня возникает проблема с его тестированием. Проблема в том, что блок выполняется после того, как мой тест уже выполнен, поскольку он выполняется асинхронно в главной очереди. Есть ли способ как-то подождать, пока блок не будет выполнен, а затем продолжить тест.
Я НЕ хочу, чтобы передать завершение к блоку только из модульного тестирования
- (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];
}
Используя этот код, блок не вызывается вообще, даже после завершения теста. – aryaxt
Я пересмотрел свой ответ. Я более тщательно тестировал этот подход. –
Спасибо. Этот метод не кажется надежным, но я не нашел лучшего решения, поэтому я продолжу его использование и надеюсь, что он не нарушит мои тесты. – aryaxt