0

私は非常に単純なAndroidアクティビティを作成しました:

public class SimpleActivity extends Activity {

private EditText editText1;
private EditText editText2;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LinearLayout verticalLayout = new LinearLayout(this);
    verticalLayout.setOrientation(LinearLayout.VERTICAL);
    editText1 = new EditText(this) {
        @Override
        protected void onTextChanged(CharSequence text, int start,
                int lengthBefore, int lengthAfter) {
            // TODO Auto-generated method stub
            super.onTextChanged(text, start, lengthBefore, lengthAfter);
        }
    };
    editText1.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            System.out.println(s.toString());
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });
    editText1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
    verticalLayout.addView(editText1);
    editText2 = new EditText(this);
    editText2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
    verticalLayout.addView(editText2);
    setContentView(verticalLayout);
}

public EditText getEditText1() {
    return editText1;
}

public EditText getEditText2() {
    return editText2;
}

}

このコードをAndroidデバイスで実行すると、コンポーネントの初期化中に、オーバーライドされたEditText.onTextChanged()メソッドとTextWatcher.onTextChanged()メソッドの両方が呼び出されます。また、メソッドeditText1.setText( "text")を呼び出すと、正しく呼び出されます。

RoboelectricテストランナーでSimpleActivityを作成すると、作成され、editText1 / editText2はnullになりませんが、コンポーネントの初期化中およびEditText.setText()の呼び出し中にEditText.onTextChanged()およびTextWatcher.onTextChanged()が呼び出されません。TextWatcherの作成方法仕事?これは私のアプリケーションの重要な部分であり、テキスト変更イベントを処理せずにテストすることはできません。

助けてください。

4

1 に答える 1

0

Robolectric 1.1 を使用して、次のコードをテストしました。

@RunWith(RobolectricTestRunner.class)
public class TestSimpleActivity {

    @Test
    public void testMethod() {
        SimpleActivity activity = new SimpleActivity();
        activity.onCreate(null);
        activity.getEditText1().setText("hello world");
    }

}

TextWatcher.onTextChanged() の発火は確認できましたが、EditText.onTextChanged() の発火は確認できませんでした。両方が起動されれば理想的ですが、https://github.com/pivotal/robolectric/blob/robolectric-1.1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowTextView.java#をご覧ください。 L63 . TextWatcher が起動するように見えますが、onTextChange() はサブクラスに実装されていないようです。

その機能が必要な場合は、Robolectric に実装する必要があります。残念ながら、Robolectric の実装にはギャップがあります。

于 2013-01-16T03:58:02.550 に答える