0

setValidator()を使用してTextFieldにバリデーターを設定しました。アプリケーションを実行すると、入力が正常に検証されます。

GUIに対して単体テストを作成するときは、TextFieldにバリデーターを設定してから、値を無効な値に設定しました。ただし、TextFieldでisValid()またはvalidate()を呼び出すと、常にtrueが返されます。

TextFieldでその値を使用してvalidator.validateを呼び出すと、falseが返されます。

TextFieldのisValid()メソッドとvalidate()メソッドを誤解していますか?または、テストで検証が開始される前にイベントを発生させる必要がありますか?

4

1 に答える 1

0

ソースコードを調べ、validate()メソッドとisValid()メソッドはすべて、HTML要素でレンダリングされた値であるgetRawValue()を使用して値をチェックしますが、生の値を直接設定しようとすると失敗します。 render()の呼び出しを必要とするレンダリングされたフラグをチェックします。

public String getRawValue() {
    String v = rendered ? getInputEl().getValue() : "";
    if (v == null || v.equals(emptyText)) {
      return "";
    }
    return v;
}

解決策は、TextFieldをサブクラス化してこれらのメソッドを上書きすることですが、私はむしろvalidator.validate()を呼び出すことに固執します。

于 2012-12-07T15:00:32.117 に答える