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


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

1 13

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)