Objetivo C - Teste de unidade dispatch_async block?
Eu li outras mensagens que surgem com soluções para esta questão. No entanto, suas soluções exigem que o código hacky seja adicionado ao meu aplicativo para poder testá-lo. Para mim, código limpo é mais importante que o teste de unidade.
Eu uso o dispatch_async no meu aplicativo regularmente, e estou tendo problemas para testá-lo. O problema é que o bloco é executado depois que meu teste já está feito, já que ele está sendo executado de forma assíncrona na fila principal. Existe uma maneira de esperar até que o bloco seja executado e continuar com o teste.
Eu não quero passar uma conclusão para o bloco apenas por causa do teste de unidade
- (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];
}