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

标签 ios unit-testing xctest

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

我只想知道在我们的 XCTestCase 类中,这是否可能在单元测试中检查特定的 uitextfield,是否允许一些字符(在我的例子中只有数字)还是没有?

最佳答案

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

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

即使特定的类可能实现了委托(delegate)方法,但最好让测试忽略这一点。 UIKit 向文本字段询问它的委托(delegate),然后调用它。我们的测试应该做同样的事情,并通过委托(delegate)调用。否则我们将锁定实现,这将使重构委托(delegate)方法变得更加困难。

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)
}

关于ios - 我们可以在单元测试时检查 uitextfield 的验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47389161/

相关文章:

ios - 如何将 Ad Hoc 发送到我不拥有的设备

.net - 强制执行单元测试不应该与实时数据库/Web 服务对话是否合理?

unit-testing - 最小起订量单元测试 - 断言与验证

unit-testing - Swift - 测试类中的对象实例化

ios - 在用户看到之前在 TableView 中显示数组

ios - 如何根据随机数组索引显示正确的 label.text

java - JUnit 如何使用参数对象的不同值进行模拟?

ios - 如何使用 Instrument 运行 Xcode UnitTest

xcode - 本地化未加载到XCTest中吗?

ios - 编译错误 : kFirLoggerSwizzler refrenced from