Я только начинаю знакомиться с написанием тестов с использованием XCTestCase
и изучаю его возможности.У меня есть простое (если придумано) приложение, которое загружает экран с кнопкой и текстовым полем.Когда текстовое поле выбрано, контроллер представления заполняет текстовое поле:
public func textFieldDidBeginEditing(_ textField: UITextField) {
textField.text = "abcd"
}
У меня также есть функциональность, которая выбирает поле при нажатии кнопки:
@IBAction public func selectField(_ sender: Any?) {
print("button press")
textfield.becomeFirstResponder()
}
Код в моем тестовом примере, программно нажимает кнопку, используя vc.button.sendActions(for: .touchUpInside)
Однако, похоже, что текстовое поле никогда не становится первым респондентом, и, таким образом, методы делегата не вызываются.Ниже приведен полный класс тестовых примеров:
var vc: ViewController!
override func setUp() {
let sb = UIStoryboard(name: "Main", bundle: nil)
vc = sb.instantiateInitialViewController() as? ViewController
_ = vc.view
}
override func tearDown() {
}
func test_textfieldPopulatesOnSelection() {
vc.button.sendActions(for: .touchUpInside)
let expectation = XCTestExpectation(description: "waiting for textfield to become first responder")
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
print("textfield.text: \(self.vc.textfield.text ?? "")")
expectation.fulfill()
}
wait(for: [expectation], timeout: 13.0)
}
Хотя я понимаю, что, вероятно, я путаю понятия UI-тестирования и модульного тестирования, мне все еще интересно, почему мои методы делегата не вызываются.