2014-11-12 2 views
1

XCTest에서 사용되는 대기열을 com.apple.main 대기열에서 다른 대기열로 변경할 수 있습니까? 이 큐에 디스패치하고 따라서 dispatch_async 블록을 입력하지 않는 응용 프로그램을 테스트하는 데 문제가 있습니다. 이 현상은 테스터에 의해 차단 된 사용 된 큐와 관련이있는 것 같습니다. XCTest 테스터의 "dispatch_get_current_queue"출력을 변경하는 방법이 있습니까?XCTest 변경 대기열

언어 : 목표 C
엑스 코드 : 6.0.1이
가 XCTest : Integrationtest는 아이 패드
대상 OS에 Hostapplication으로 : 아이폰 OS 7.1 및 8 여기

답변

0

어떻게 비동기 단위를 실행 해요되어

을 테스트

단위 테스트 위에이 매크로를 추가하십시오.

// Macro - Set the flag for block completion 
#define StartBlock() __block BOOL waitingForBlock = YES 

// Macro - Set the flag to stop the loop 
#define EndBlock() waitingForBlock = NO 

// Macro - Wait and loop until flag is set 
#define WaitUntilBlockCompletes() WaitWhile(waitingForBlock) 

// Macro - Wait for condition to be NO/false in blocks and asynchronous calls 
// Each test should have its own instance of a BOOL condition because of non-thread safe operations 
#define WaitWhile(condition) \ 
do { \ 
while(condition) { \ 
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; \ 
} \ 
} while(0) 

그래서 시험이

- (void)testContentNode 
{ 
    StartBlock(); 
    [AFContentNode loadContentWithUUID:@"d6d87899-94d4-4540-aeab-e88647e4ad61" 
          completion:^(AFMagnoliaNode *node, NSError *error) 
    { 
     XCTAssert(!error, @"Error raised: %@", error); 
     XCTAssert(node, @"Node has not been fetched"); 
     EndBlock(); 
    }]; 
    WaitUntilBlockCompletes(); 
} 
+0

처럼 쓸 수있는 testhost (통합 테스트)를 테스트 할 때이 일을합니까? 아니면 시뮬레이터를 사용합니까? – Simon

+0

시뮬레이터를 사용하고 있지만 testhost에 문제가 없어야합니다. – l0gg3r