Рассмотрим следующий тест единицы:Правильный выбор времени/размещение метода XCTest Expectation в модульных тестах?
- (void)testSample {
XCTestExpectation *expectation = [self expectationWithDescription:@"Sample"];
[self.manager loadAllSuccess:^{
[expectation fulfill];
NSArray *data = [self.manager dataForIndex:0];
// Correct count of data is 10, not 44 - this should fail.
XCTAssertEqual(44, data.count);
} failure:^(NSError *error) {
[expectation fulfill];
XCTFail(@"Error encountered");
}];
[self waitForExpectationsWithTimeout:60 handler:nil];
}
Я встречая некоторые проблемы с известного случая отказа. Тест успешно завершается, несмотря на то, что в массиве данных должно быть только 10 элементов.
Если я поставил [expectation fulfill]
вызов в нижней части блока, после вызова метода XCTAssertEqual(44, data.count)
, тест работает, как ожидалось и не пока не исправите значение будет 10.
Это известная проблема? Я был не в состоянии прочитать документацию о том, что я должен называть, что в последнюю минуту ...
Всегда вызывайте функцию execute() в конце асинхронного обратного вызова - выполнение ожиданий ранее может установить условие гонки, когда цикл выполнения может выйти до завершения теста. Если тест имеет более одного ожидания, он не пройдет, если каждое ожидание не выполнит выполнение() в течение таймаута, указанного в waitForExpectationsWithTimeout(). Нашли это по адресу http://nshipster.com/xctestcase/ – Zach