5

Androidアプリ用のJUnitテストケースを作成しています。テストクラスは、ウィジェットのユーザー入力をエミュレートするために拡張ActivityInstrumentationTestCase2および呼び出します。ただし、すべてのアルファベットキーコード(例)は、小文字のみをに送信します。アルファベットのキーコードを送信する前に送信しようとしましたが、うまくいかなかったようです。では、ユーザーが大文字を入力するのをシミュレートするにはどうすればよいですか?sendKeys()TextEditKeyEvent.KEYCODE_GTextEditKeyEvent.KEYCODE_SHIFT_LEFT

編集:

大文字を手動で入力できます。実際、EditTextは次のように定義されています。

    <EditText android:id="@id/brand_text"
              android:singleLine="true"
              android:capitalize="words"
              android:hint="@string/brand_hint"
    />

このandroid:capitalize="words"属性により、エミュレーターでオンスクリーンキーボードが大文字モードになります。(デバイスでも同じように動作すると思いますが、テストするものがありません。)SDKに付属のエミュレーターはハードウェアキーボードをエミュレートしないため、UIがどのように機能するかをテストできませんでした。ハードキー。

私も試しました

EditText brandText = this.activity.findViewById(R.id.brand_text);
brandText.setText(someString);

しかし、私がこれを行ったとき、テストは失敗しました。私はそのすべてのコードを修正したので、現時点では詳細をここに示していません。私はそれを再作成し、それらの詳細でこの質問を編集しようとします。

4

2 に答える 2

4

StringOPで、の文字をテキストボックスに送信するメソッドを作成していることについては触れませんでした。@PaulHarrisが提案したように使用setText()してみましたが、機能しませんでした。私のテストはまだいくつかのアサーションに失敗しました。

少し掘り下げた後、最終的Instrumentation.sendStringSync()に私の目的に合ったものを見つけました。(テストクラスでgetInstrumentation()Instrumentationを呼び出すことにより、オブジェクトを取得できます。)

于 2012-11-20T03:18:26.263 に答える
1

次のようなことをしたい場合:

EditText brandText = this.activity.findViewById(R.id.brand_text);
brandText.setText(someString);

実際に行う必要があるのは次のとおりです。

EditText brandText = this.activity.findViewById(R.id.brand_text);
instrumentation.runOnMainSync(new Runnable() {
    @Override
    public void run() {
        brandText.setText(someString);
    }
}); 

これは、UIスレッド(または任意の名前のメインスレッド)でGUIを操作する必要があるためです。

このような方法:

public void setText(EditText editText, final String textToSet){
    instrumentation.runOnMainSync(new Runnable() {
        @Override
        public void run() {
            brandText.setText(textToSet);
        }
    }); 
}

あなたのためにうまくいくはずです。

于 2012-11-09T21:58:07.493 に答える