Ответ 1
Тестирование Black-box
Тестирование пользовательского интерфейса - это черно-ячеечное тестирование. Вам не нужно ничего знать о реализации кода, который вы тестируете.
Например, вы должны заботиться только об изменении значения на метке, а не о том, что контроллер передал нужные данные в представление. Вы можете думать о тестировании пользовательского интерфейса от пользователя вашего приложения. Ей все равно, как работает ваш ItemsViewController
(или даже тот, что он существует), поэтому зачем тестировать пользовательский интерфейс?
Как это сделать "Работа"
Говоря, я понимаю ваше разочарование. Было бы здорово, если бы вы могли развернуть контроллер вида, а затем использовать его с помощью тестирования пользовательского интерфейса и принятия утверждений. Однако с Beta 5 это невозможно.
Интересно, что вы можете создать экземпляры объектов приложения с помощью простого @testable import ModuleName
в верхней части ваших пользовательских интерфейсов. Обратите внимание, что вы не можете взаимодействовать с ним с помощью методов .tap()
-like, так как это класс UI*
, а не XCUI*
.
Рассмотрим Donut
как имя модуля приложения.
import XCTest
@testable import Donut
class DonutUITests: XCTestCase {
let app = XCUIApplication()
override func setUp() {
continueAfterFailure = false
app.launch()
}
func testItemsViewController() {
let controller = ItemsViewController()
controller.addItemButton.tap() // <---- UIButton does not respond to tap()!
}
}