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

时间:2017-11-20 09:52:23

标签: ios unit-testing xctest

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

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

2 个答案:

答案 0 :(得分:3)

进行调用shouldChangeCharactersInRange的单元测试并检查结果应为true或false的预期。

这是如何对委托方法进行单元测试的示例。在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)
}

答案 1 :(得分:0)

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

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

通过Google搜索上述标识符可以获得一些详细信息。但是,文档并不是那么好。