Activityの機能テストを行うActivityInstrumentationTestCase2クラスについて説明します。
概要
ActivityInstrumentationTestCase2はアクティビティの機能テストケースの基底クラスです。
このクラスを継承したテストケースでは、テスト対象アプリケーション内で実際にアクティビティを起動させてユーザ入力をシミュレートできます。
ActivityInstrumentationTestCaseというクラスも存在しますが、非推奨となっているため(Android 1.5 SDK時点)注意が必要です。
ActivityInstrumentationTestCase2は以下の特徴があります。
・アクティビティ内のButtonやEditText等のすべてのウィジェットの操作が可能です。
・[メニュー]、[ホーム]、[戻る]を含めたすべての端末のキーボード入力をシミュレートすることができます。
・一つのテストメソッドで、対象アクティビティのonCreate()からonDestroy()までが実行されます。
・別のアクティビティを起動してその状態を確認するような、アクティビティをまたがった試験はできません。
android.test.ActivityInstrumentationTestCase2リファレンス
http://developer.android.com/intl/ja/reference/android/test/ActivityInstrumentationTestCase2.html
使い方
基本
ActivityInstrumentationTestCase2を継承したテストケースのサンプルは以下になります。
public class TextInstrumentationTest extends ActivityInstrumentationTestCase2<TextTestActivity> { private EditText text;
public TextInstrumentationTest() { super("org.sample", TextTestActivity.class); }
@Override protected void setUp() throws Exception { super.setUp(); text = (Text) getActivity().findViewById(R.id.test_text); }
public void test01() { // ※1 UIスレッドからテキストにフォーカスする getActivity().runOnUiThread( new Runnable() { @Override public void run() { text.requestFocus(); } });
// ※2 UIスレッドに要求した操作の完了を待つ getInstrumentation().waitForIdleSync();
sendKeys(KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_B, KeyEvent.KEYCODE_C, KeyEvent.KEYCODE_1, KeyEvent.KEYCODE_2, KeyEvent.KEYCODE_3 );
assertEquals("abc123", text.getEditableText().toString());
}
}
テストメソッドtest01()では、TextTestActivity上のEditTextに"abc123"という入力イベントを送り、実際に入った値を確認しています。
※1 ではActivityのUIスレッド上でEditTextインスタンスへのフォーカス要求を送っています。これは画面の状態変更は、UIスレッド上でしか行えないためです。※2では※1で送った要求が完了するのを待機しています。
インテントを渡す場合
Activityにインテントを渡して起動したい場合は、setUp()メソッド内で設定します。
以下はサンプルコードです。
@Override protected void setUp() throws Exception { super.setUp(); Intent intent = new Intent(Intent.ACTION_MAIN); setActivityIntent(intent); }
端末からの入力をシミュレートする場合
H/Wキーボードや端末の「戻る」「ホーム」「メニュー」ボタンの押下をシミュレートする場合は、
sendKey()メソッドを使用して、入力したいボタンに対応するキーコードイベントを送信します。
sendKey()の引数に指定するintには、KeyEventクラスに用意された定数を使用します。