2014-11-12 2 views
1

Можно ли изменить очередь, которая используется в XCTest из очереди com.apple.main, в другую? У меня возникают проблемы с тестированием приложения, которое также отправляется в эту очередь и, таким образом, не входит в блок dispatch_async. Это явление, по-видимому, имеет какое-то отношение к используемой очереди, которая блокируется тестером. Есть ли способ изменить вывод «dispatch_get_current_queue» внутри тестера XCTest?XCTest change Queue

Язык: Objective C
XCode: 6.0.1
XCTest: Integrationtest с Hostapplication на IPad в
целевой ОС: прошивкой 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

 Смежные вопросы

  • Нет связанных вопросов^_^