2017-11-20 9 views
1

ViewController(0120)にUItextfieldshouldChangeCharactersInRange)の方法でいくつかの検証があるとします。ユーザーはアルファベットやその他の特殊文字ではなく数字のみを入力できます。ユニットテスト中にuitextfieldの検証を確認できますか?

私はちょうど私たちのXCTestCaseクラスで、ユニットテストでこれが可能であることを知りたい場合は、uitextfieldを確認し、いくつかの文字(私の場合は数字のみ)を許可しているかどうかを確認しますか?

答えて

0

これはユニットテストではなく、UIテストです。これは、UIの動作が単位でないためです。しかし、あなたのテストにUIテストを含めることができます。これはテストチェーンに参加します。

基本的に、テストしてアクションを送信するUI要素(XCUIElement)が表示されます。 e。 -typeText:を使用してください。その後、XCUIElementAttributesプロトコルを使用して、その要素の実際の状態を意図した状態と比較します。

上記の識別子を検索すると、詳細がわかります。しかし、ドキュメントはそれほど良いものではありません。

1

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) 
} 
関連する問題