从Xcode运行测试时,将调用XCTestObservation下的函数testSuiteWillStart

时间:2018-08-06 22:01:41

标签: xctest xcuitest xctestcase xcode9.4

我正在使用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函数。有人遇到过类似的问题吗?

2 个答案:

答案 0 :(得分: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")
   }
}

答案 1 :(得分:0)

函数testSuiteWillStart只有在添加Test Observer时才会调用,

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

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>