2016-08-25 2 views
1

Ich verwende Swift für eine Xcode UI Test App. Unsere Anwendung im Test erscheint manchmal eine "Alert Box", die den normalen Arbeitsablauf des Testfalls beeinflusst. Es gibt keine Möglichkeit vorherzusagen, wann das Popup erscheinen würde. Es kann bei Testfall 1 oder Testfallnummer x auftreten.Swift ASYNC Ereignisbehandlung mit Xcode UI Test

Ich wollte die "Alert Box" und mit dem Rest des Testfalles weitermachen. Wie handhabe ich ähnliche Ereignisse von ASYNC nature mit swift XCUITest Framework, ohne den normalen Ablauf des Testfalls zu beeinflussen?

Bisher habe ich gefunden:

expectationForPredicate(exists, evaluatedWithObject: alertbox, handler: nil) 
waitForExpectationsWithTimeout(300, handler: nil) 

Dies aus zwei Gründen nicht möglich ist.

  1. Timeout kann nicht vorhergesagt werden
  2. fließen Testfall

    func testTestCase1 { 
        let expectation = expectationWithDescription("Alert Found! Dismissing") 
        do { 
         // ... 
         // test steps 
         // ... 
         expectation.fulfill() 
        } 
        waitForExpectationsWithTimeout(300) { 
         dimissAlert() 
        } 
    } 
    

ref1 blockiert: https://www.bignerdranch.com/blog/asynchronous-testing-with-xcode-6/
Ref2: XCTest and asynchronous testing in Xcode 6
Ref3: https://adoptioncurve.net/archives/2015/10/testing-asynchronous-code-in-swift/

Gibt es eine allgemeine Möglichkeit, asynchrone Ereignisse in der gesamten Suite zu behandeln? Wie kann ich mit dem Testen fortfahren, während ein anderer Thread auf das Ereignis "Alert Box" wartet?

Prost!

Antwort

1

Stephen hat recht, der UI-Unterbrechungsmonitor sollte gut funktionieren. Ich empfehle, es zu Ihrem Test-Setup hinzuzufügen, damit es für alle Ihre Tests ausgeführt wird.

class UITests: XCTestCase { 
    let app = XCUIApplication() 

    override func setUp() { 
     super.setUp() 
     addUIInterruptionMonitorWithDescription("Alert") { (alert) -> Bool in 
      alert.buttons["OK"].tap() 
      return true 
     } 
     app.launch() 
    } 

    func testFoo() { 
     // example test 
    } 
} 
Verwandte Themen