UITesting, XCTest текущий класс ViewController
Простая задача. Я получил кнопку, которая выполняет переход к следующему контроллеру вида. Я хочу написать 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)