0

我正在使用 Xcode 版本 - 版本 9.4.1 (9F2000)。

我正在尝试通过覆盖 XCTestObservation 类并将其注册到测试类来为使用 XCUITest 运行的测试创建自定义日志。

观察者类:TestObserver

class TestObserver : NSObject, XCTestObservation {

    public func testSuiteWillStart(_ testSuite: XCTestSuite) {
      print("I am inside function testSuiteWillStart --> \(testSuite)")
} }

在我的测试用例中设置:

class MyTestCase: XCTestCase{

override class func setUp() {
    super.setUp()
    XCTestObservationCenter.shared.addTestObserver(TestObserver())
}}

我尝试使用 Xcode 和 Fastlane 运行测试,但函数 testSuiteWillStart 根本没有被调用。有没有人遇到过类似的问题?

4

2 回答 2

0

您需要在 UITest info.plist 中调用 Observer 调用。Info.plist,创建一个新的键“Principal Class”并给一个值作为TestTarget。例如 UITests.TestObserver

虽然您的 testobserver 类应该看起来像

class TestObserver: NSObject, XCTestObservation {
    override init() {
        super.init()
        XCTestObservationCenter.shared().addTestObserver(self)
    }
   func testBundleWillStart(_ testBundle: Bundle) {
    print ("start")
   }
}
于 2018-09-12T17:09:18.570 回答
0

testSuiteWillStart只有在添加了测试观察者时才会调用该函数,

您可以使用以下代码行添加观察者:

XCTestObservationCenter.shared.addTestObserver(observer) //observer is instance of object that confirms to XCTestObservation

要遵循的步骤:

  1. 创建一个确认XCTestObservation协议的类
  2. 在测试包info.plist中为键添加类名NSPrincipalClass

步骤1:

class SOTestObserver: NSObject, XCTestObservation {


    override init() {
        super.init()
        XCTestObservationCenter.shared.addTestObserver(self)
    }

    func testBundleWillStart(_ testBundle: Bundle) {
        print("---## \(#function), URL: \(testBundle.bundleURL)")
    }
}

第2步:

例如,如果您的项目名称有空格,My App则添加以下内容info.plist

<key>NSPrincipalClass</key>
<string>My_AppUITests.SOTestObserver</string> 

如果您的项目名称没有空格,请添加以下内容

<key>NSPrincipalClass</key>
<string>$(PRODUCT_NAME).SOTestObserver</string> 
于 2021-04-09T15:38:43.147 回答