UITesting, текущий класс ViewController XCTest

Простая проблема. Я получил кнопку, которая выполняет segue для следующего контроллера. Я хочу написать UI XCTest, чтобы сказать мне, что он открыл контроллер просмотра, который мне нужен.

Ответ 1

Рамка тестирования пользовательского интерфейса не имеет доступа к вашему коду приложений, что делает утверждения класса на примерах невозможными. Вы не можете напрямую указать класс контроллера, который находится на экране.

Однако, если вы думаете о своем тесте несколько иначе, вы можете сделать очень похожее утверждение. Напишите свои тесты так, как будто вы являетесь пользователем.. Ваш пользователь не заботится о том, смотрит ли он на ItemDetailViewController или ItemListTableViewController, поэтому и ваши тесты не должны быть.

Пользователь заботится о том, что на экране. Какое название? Или, какие имена этих кнопок? Следуя этой логике, вы переписываете свой тест для утверждения на основе этих элементов, а не для имени кодированного класса.

Например, если вы представляете свой контроллер в стеке навигации, вы можете утверждать заголовок.

let app = XCUIApplication()
app.buttons["View Item"].tap()

XCTAssert(app.navigationBars["Some Item"].exists)

Или, если экран представлен модально, но вы знаете какой-то статический текст или кнопки, используйте их.

let app = XCUIApplication()
app.buttons["View Item"].tap()

XCTAssert(app.staticTexts["Item Detail"].exists)
XCTAssert(app.buttons["Remove Item"].exists)