2015-03-19 14 views
11

Các tài liệu cho XCTest waitForExpectationsWithTimeout: xử lý :, nói rằngSử dụng XCTest, làm thế nào một chuỗi có thể kết hợp với nhau nhiều chuỗi {mong đợi - chờ đợi} riêng biệt?

Chỉ có một -waitForExpectationsWithTimeout: xử lý: có thể hoạt động ở bất kỳ thời điểm nào, nhưng nhiều đoạn rời rạc của {mong đợi -> chờ đợi} có thể được xích lại với nhau.

Tuy nhiên, tôi không biết cách triển khai tính năng này, cũng như tôi không thể tìm thấy bất kỳ ví dụ nào. Tôi đang làm việc trên một lớp học mà trước tiên cần phải tìm tất cả các cổng nối tiếp có sẵn, chọn cổng chính xác và sau đó kết nối với thiết bị gắn vào cổng đó. Vì vậy, tôi đang làm việc với ít nhất hai kỳ vọng, XCTestExpectation * expectationAllAvailablePorts và * expectationConnectedToDevice. Làm thế nào tôi sẽ chuỗi hai?

Trả lời

0

nhanh chóng

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

Kỹ thuật này cuối cùng đã bắt kịp với tài liệu. Tôi đã sử dụng nó trong Objective-C và nó thực sự hoạt động. –

7

Tôi làm như sau và hoạt động.

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

Gán kỳ vọng của tôi vào biến số yếu làm việc cho tôi.

+0

này đã làm các trick !!!! Cảm ơn bạn đã đề cập đến biến số yếu! –

+0

* Thận trọng: * Liên kết 'ở đây' ở trên có thể không hoạt động nữa. Thay vì một trang về các biến yếu, nó bây giờ trình bày một trang mà "đòi hỏi" bạn phải cài đặt "Flash Player Pro". Nhấp vào nút [x] trên trang web để "đóng" cảnh báo đã tải xuống tệp .dmg sơ sài sang máy Mac của tôi. Tôi đã không mở nó. WMMV. –

0

Điều này dường như cũng hiệu quả đối với tôi trong 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)") 
    } 
} 
Các vấn đề liên quan