如何根据测试用例失败或跳过或通过 xctest 框架触发另一个方法或任务

Aut*_*ser 2 xctest swift xcode-ui-testing ios11 xcode9

我正在使用 xctest 框架快速编写 UI 测试用例。

我想根据测试用例通过或失败或跳过触发另一个任务(例如截屏或)。我当前的代码如下

  import Foundation
  import XCTest

  class HomePageChromeUITests: XCTestCase {

var pathStr:String = ""
override func setUp() {

    super.setUp()
    continueAfterFailure = false
    self.launchWithUserLoggedIn()
}

override func tearDown() {
    super.tearDown()
}

func testHomePageChrome_10385() {
    let app = XCUIApplication()


    let backButton = app.buttons[AccessibilityIdentifiers.PageEditorBackButton]
    let editButton = app.buttons[AccessibilityIdentifiers.PageEditorEditButton]

    XCTAssertTrue(backButton.exists && backButton.frame.origin.x < editButton.frame.origin.x, "Back button does not exist.---10385")
    XCTAssertTrue(!editButton.exists, "Edit button does not exist.---10385")

 }
}
Run Code Online (Sandbox Code Playgroud)

我想在测试用例失败时触发一个方法,并在那里传递我的失败消息,即“10385”。

我怎样才能做到这一点。任何帮助,将不胜感激。

Mah*_*iad 6

在 XCode 9 中,Apple 将其之前的 XCTestObservation 更改为 XCTestObservationCenter。你会在这里找到参考

要根据 TC 通过或失败执行某些操作,您需要注册 testObserver 并将其添加到您的测试中。

这是完整的实现。

第 1 步:创建一个名为观察者的类。

 import Foundation
 import XCTest

 class Observer: NSObject, XCTestObservation {
var failedTC = 0

func testBundleWillStart(_ testBundle: Bundle) {
    print("Test bundle started")
}

func testBundleDidFinish(_ testBundle: Bundle) {
    print("Test bundle Finished")
}

func testSuiteWillStart(_ testSuite: XCTestSuite) {
    print("Test suite started")
}

func testSuiteDidFinish(_ testSuite: XCTestSuite) {
    print("Test suite ended")
}

func testSuite(_ testSuite: XCTestSuite, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
    print("Test suite failed, information: " + description)
}

func testCaseWillStart(_ testCase: XCTestCase) {
    print("Test case started")
}

func testCaseDidFinish(_ testCase: XCTestCase) {
    print("Test case finished")
}

func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
    print("Test case failed. Message: " + description)

    var tmpMsgArr = description.components(separatedBy: ".---")
    let testcaseID = tmpMsgArr[0]

    print("------" + testcaseID)

    yourAwesomeMethodThatWillbeCalledWhenTCFails() // implement this method that you want to execute

    failedTC += 1
}

}
Run Code Online (Sandbox Code Playgroud)

第 2 步:将此观察者添加到您的测试中。添加观察者代码在这里。

  let observer = Observer() // Your created observer class
  let observationCenter = XCTestObservationCenter.shared()
  observationCenter.addTestObserver(observer)
Run Code Online (Sandbox Code Playgroud)

注意:在分解测试时移除观察者,否则如果在每个setUp.

在您的情况下,重写您的设置方法,如下所示:

 override func setUp() {

    super.setUp()
    continueAfterFailure = false

    let observer = Observer() // your created observer class
    let observationCenter = XCTestObservationCenter.shared()
    observationCenter.addTestObserver(observer)

    self.launchWithUserLoggedIn()
}
Run Code Online (Sandbox Code Playgroud)

希望这个完整的例子能帮助你。