我正在使用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函数。有人遇到过类似的问题吗?
答案 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
要遵循的步骤:
XCTestObservation
协议的类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>