2015-03-19 4 views
11

Документация XCTest waitForExpectationsWithTimeout: обработчик :, утверждает, чтоИспользуя XCTest, как можно объединить несколько дискретных последовательностей {ожидания -> ждать}?

только один -waitForExpectationsWithTimeout: обработчик: может быть активным в любой момент времени, но несколько дискретных последовательностей {ожидания -> ожидания} могут быть соединены друг с другом.

Однако я не знаю, как реализовать это, и не могу найти никаких примеров. Я работаю над классом, который сначала должен найти все доступные последовательные порты, выбрать правильный порт и затем подключиться к устройству, подключенному к этому порту. Итак, я работаю, по крайней мере, с двумя ожиданиями, ожидания XCTest Expectation *AllAvailablePorts и * expectConnectedToDevice. Как бы связать эти два?

ответ

0

быстры

let expectation1 = //your definition 
let expectation2 = //your definition 

let result = XCTWaiter().wait(for: [expectation1, expectation2], timeout: 10, enforceOrder: true) 

if result == .completed { 
    //all expectations completed in order 
} 
+1

Техника, наконец, догнала документацию. Я тоже использовал это в Objective-C, и это действительно работает. –

7

Я делаю следующее и работает.

expectation = [self expectationWithDescription:@"Testing Async Method Works!"]; 

[AsynClass method:parameter callbackFunction:^(BOOL callbackStatus, NSMutableArray* array) { 
    [expectation fulfil]; 
    // whatever 
}]; 

[self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { 
    if (error) { 
     XCTFail(@"Expectation Failed with error: %@", error); 
    } 
    NSLog(@"expectation wait until handler finished "); 
}]; 

// do it again 

expectation = [self expectationWithDescription:@"Testing Async Method Works!"]; 

[CallBackClass method:parameter callbackFunction:^(BOOL callbackStatus, NSMutableArray* array) { 
    [expectation fulfil]; 
    // whatever 
}]; 

[self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { 
    if (error) { 
     XCTFail(@"Expectation Failed with error: %@", error); 
    } 
    NSLog(@"expectation wait until handler finished "); 
}]; 
3

Назначение моего ожидания слабой переменной сработало для меня.

+0

Это сделал трюк !!!! Спасибо за упоминание слабой переменной! –

+0

* Внимание! * Ссылка выше не может работать. Вместо страницы о слабых переменных, теперь она представляет страницу, на которой «требуется» установить «Flash Player Pro». Нажав кнопку [x] на веб-сайте, чтобы «закрыть» предупреждение, загрузили отрывочный файл .dmg на мой Mac. Я не открыл его. WMMV. –

0

Это, похоже, работает для меня и в Swift 3.0.

let spyDelegate = SpyDelegate() 
var asyncExpectation = expectation(description: "firstExpectation") 
spyDelegate.asyncExpectation = asyncExpectation 
let testee = MyClassToTest(delegate: spyDelegate) 
testee.myFunction() //asyncExpectation.fulfill() happens here, implemented in SpyDelegate 

waitForExpectations(timeout: 30.0) { (error: Error?) in 
    if let error = error { 
     XCTFail("error: \(error)") 
    } 
} 

asyncExpectation = expectation(description: "secoundExpectation") 
spyDelegate.asyncExpectation = asyncExpectation 
testee.delegate = spyDelegate 
testee.myOtherFunction() //asyncExpectation.fulfill() happens here, implemented in SpyDelegate 

waitForExpectations(timeout: 30.0) { (error: Error?) in 
    if let error = error { 
     XCTFail("error: \(error)") 
    } 
}