Функция testSuiteWillStart в XCTestObservation вызывается при запуске тестов из Xcode
Я использую версию XCode - Версия 9.4.1 (9F2000).
Я пытаюсь создать пользовательские журналы для тестов, запущенных с XCUITest, переписав класс XCTestObservation и зарегистрировав его с помощью тестового класса.
Класс наблюдателя: 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())
}}
Я попытался запустить test, используя Xcode и Fastlane, но функция testSuiteWillStart не вызывается вообще. Кто-нибудь сталкивался с подобной проблемой?
2 ответа
Функция
testSuiteWillStart
будет вызываться только при добавлении Test Observer,
Вы можете добавить наблюдателя, используя следующую строку кода:
XCTestObservationCenter.shared.addTestObserver(observer) //observer is instance of object that confirms to XCTestObservation
Шаги, которые необходимо выполнить:
- Создайте класс, подтверждающий
XCTestObservation
протокол - Добавить имя класса в тестовый пакет для ключа
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>
Вам нужно позвонить своим наблюдателям в UITest info.plist. 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")
}
}