2017-11-20 17 views
1

(예 : vc1)에 UItextfield의 유효성 확인을 shouldChangeCharactersInRange 방법으로 입력했다고 가정합니다. 사용자가 알파벳이나 다른 특수 문자가 아닌 숫자 만 입력 할 수 있기 때문입니다.유닛 테스트 중에 uitextfield의 유효성을 확인할 수 있습니까?

우리는 XCTestCase 클래스에서 단위 테스트에서 특정 uitextfield을 확인하기 위해 가능한지 알고 싶습니다. (일부 경우에는 숫자 만 허용) 일부 문자는 허용합니까?

답변

0

기술적으로 이것은 단위 테스트는 아니지만 UI 테스트입니다. UI의 동작이 아무런 단위가 아니기 때문입니다. 그러나 테스트 체인에 참여할 테스트에는 UI 테스트를 포함 할 수있는 기능이 있습니다.

기본적으로 UI 요소 (XCUIElement)를 테스트하여 동작을 보냅니다. 이자형. -typeText:을 사용하십시오. 그런 다음 XCUIElementAttributes 프로토콜을 사용하여 해당 요소의 실제 상태를 의도 된 상태와 비교합니다.

위의 식별자를 검색하면 자세한 정보를 얻을 수 있습니다. 그러나 그 문서는 그렇게 좋지 않습니다.

1

단위 테스트를 수행하여 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) 
}