我们可以在单元测试时检查 uitextfield 的验证吗?

iNo*_*oob 6 unit-testing ios xctest

假设我们在我们的ViewController(比如 vc1 )中对UItextfieldinshouldChangeCharactersInRange方法进行了一些验证,因为用户只能输入数字而不是字母或其他特殊字符。

我只想知道,在我们的XCTestCase班级中,这是否可以在单元测试中检查特定的uitextfield,是否允许某些字符(在我的情况下只有数字)?

Jon*_*eid 5

进行单元测试,调用shouldChangeCharactersInRange并检查结果应该是真还是假的期望。

这是如何对委托方法进行单元测试的示例。在 UIKit 调用特定方法的地方,只需让测试调用相同的东西即可。

即使一个特定的类可能实现委托方法,如果测试仍然不知道这一点会更好。UIKit 向文本字段询问其委托,然后调用它。我们的测试也应该这样做,并通过委托进行调用。否则我们将锁定实现,这将使重构委托方法变得更加困难。

func testMyTextField_ShouldAllowAlphabeticCharacters() {
    let vc = // …Whatever you do to load your view controller
    vc.loadViewIfNeeded() // Make sure text field is loaded
    let field = vc.myTextField

    // Call through field.delegate, not through vc
    let result = field.delegate.textField(field,
                         shouldChangeCharactersIn: NSMakeRange(0, 1),
                         replacementString: "a")

    XCTAssertTrue(result)
}
Run Code Online (Sandbox Code Playgroud)


Ami*_*wad 0

从技术上讲,这不是单元测试,而是 UI 测试,因为 UI 的行为不是单元。但是可以在您的测试中包含 UI 测试,这将参与测试链。

XCUIElement基本上,您获得要测试的UI 元素 ( ) 并向其发送操作,即使用-typeText:. 然后,您可以使用协议将该元素的实际状态与预期状态进行比较XCUIElementAttributes

谷歌搜索上述标识符将为您提供一些详细信息。然而,文档并不是那么好。