이 질문에 대한 해결책을 제시하는 다른 게시물을 읽었습니다. 그러나 솔루션을 테스트하려면 해시 코드를 내 애플리케이션에 추가해야합니다. 나에게 청소 코드는 단위 테스트보다 중요하다.목표 C - 단위 테스트 dispatch_async 블록?
나는 정기적으로 내 응용 프로그램에서 dispatch_async를 사용하며 단위 테스트에 문제가 있습니다. 문제는 내 테스트가 이미 완료된 후 블록이 실행되는 것입니다. 메인 큐에서 비동기 적으로 실행되기 때문입니다. 어떻게 든 블록이 실행될 때까지 기다린 다음 테스트를 계속할 수있는 방법이 있습니까?
난 단지 때문에 단위 테스트 dispatch_group
에
- (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