获取在Xcode UI测试中执行的每个测试用例的结果

Kha*_*ana 3 xcode ui-testing xctest xcode-ui-testing xctestcase

在Xcode的测试套件中执行每个测试用例后,我需要测试状态.我知道观察者可以帮助实现它.但是我如何在测试中使用它?

小智 7

您正走在正确的轨道上,可以通过XCTestObservation协议(https://developer.apple.com/documentation/xctest/xctestobservation)实现您想要做的事情.您可以将一个观察者添加到测试用例类中,我建议在setUp()方法中执行此操作,因为它在每个测试方法之前执行.

override func setUp() {
    super.setUp()

    continueAfterFailure = false

    XCUIApplication().launch()

    XCTestObservationCenter.shared.addTestObserver(UITestObserver())
}
Run Code Online (Sandbox Code Playgroud)

为此,您应该实现一个符合XCTestObservation协议的类,然后为您感兴趣的方法提供您自己的实现,以执行您需要/想要的任何操作.在您的情况下,您可能希望为此方法提供实现...

optional public func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int)
Run Code Online (Sandbox Code Playgroud)

这是一个关于这个测试观察者类看起来像什么的快速示例......

import XCTest

public class UITestObserver: NSObject, XCTestObservation {
    public func testCase(_ testCase: XCTestCase,
                           didFailWithDescription description: String,
                           inFile filePath: String?,
                           atLine lineNumber: Int) {
        print("failure description: \(description)")
        print("failed test case: \(testCase)")
        if let filePath = filePath {
            print("failure at file path: \(filePath)")
        }
        print("failure at line: \(lineNumber)")
    }
}
Run Code Online (Sandbox Code Playgroud)

我提供了一个上面的例子,只要你的一个测试用例失败就会被调用,所以你不需要在测试用例类或方法中"做"任何事情.

希望这可以帮助!