3

アクティビティの onCreate() メソッド内で、ボタンが onClick メソッドを持つように定義されている Android アプリケーションがあります。コード内:

public void onCreate(Bundle savedInstanceState) {
    /.../
        buttonSave = (Button) findViewById(R.id.store_button_save);
        buttonSave.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                saveEditor(v);
            }
        });     
    /.../
}

私の質問は、このネストされたメソッド onCLick() を Android 単体テストから呼び出すにはどうすればよいですか? myActivity.onClick(myButton)onClick() はアクティビティ自体で定義されたメソッドではないため、機能しません。

ところで、テスト用に元のソース コードを変更するべきではありません。

4

2 に答える 2

1

このような匿名クラスを作成しないことで、これをテストできます。
代わりに、通常の内部クラスを作成し、新しいインスタンスをリスナーに割り当てます。

public static class MyClickListener implements OnClickListener {
Editor editor;
public MyClickListener(Editor e) {
   this editor= e;
}
public void onClick(View v) {
  editor.saveEditor(v);
}
}

buttonSave.setOnClickListener(new MyClickListener());

JuniTest で

    public void testOnClickListener() {
     Editor e = new Editor();
    MyClickListener l = new MyClickListener(e);
    l.onClick();
    // however you check for correct result
    assertTrue(checkSaveEditor(e));

    }

しかし、なぜ unitest メソッドsaveEditor()だけを書かないのでしょうか? これで十分ですonClick()。動作することを信頼できます。

于 2013-08-09T16:21:32.073 に答える
0

onClick メソッドは匿名クラス内で定義されているため、直接呼び出すことはできません。代わりに、外部クラスからクリック イベントをトリガーする必要があります。Android 開発についてはよくわかりませんが、ActivityManager を使用して @UIthreadTest アノテーションを使用してボタンのクリックをシミュレートするシナリオなどをテストする方法については、次の記事で説明しています。Android JUnitテストケースでButton.performClickを呼び出す方法は?

于 2013-08-09T16:21:43.883 に答える