Activityの機能テストを行うActivityInstrumentationTestCase2クラスについて説明します。
#BR
*概要 [#re0cb7c8]
ActivityInstrumentationTestCase2はアクティビティの機能テストケースの基底クラスです。
このクラスを継承したテストケースでは、テスト対象アプリケーション内で実際にアクティビティを起動させてユーザ入力をシミュレートできます。
ActivityInstrumentationTestCaseというクラスも存在しますが、非推奨となっているため(Android 1.5 SDK時点)注意が必要です。
ActivityInstrumentationTestCase2は以下の特徴があります。
#BR
・アクティビティ内のButtonやEditText等のすべてのウィジェットの操作が可能です。
・[メニュー]、[ホーム]、[戻る]を含めたすべての端末のキーボード入力をシミュレートすることができます。
・一つのテストメソッドで、対象アクティビティのonCreate()からonDestroy()までが実行されます。
・別のアクティビティを起動してその状態を確認するような、アクティビティをまたがった試験はできません。
#BR
*android.test.ActivityInstrumentationTestCase2リファレンス [#hea5ef0c]
[[http://developer.android.com/intl/ja/reference/android/test/ActivityInstrumentationTestCase2.html>http://developer.android.com/intl/ja/reference/android/test/ActivityInstrumentationTestCase2.html]]
#BR
*使い方 [#wdaf5ff7]

**基本 [#x8124f26]
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で送った要求が完了するのを待機しています。

**インテントを渡す場合 [#e6ca2d5c]
Activityにインテントを渡して起動したい場合は、setUp()メソッド内で設定します。
以下はサンプルコードです。
 @Override
 protected void setUp() throws Exception {
     super.setUp();
     Intent intent = new Intent(Intent.ACTION_MAIN);
     setActivityIntent(intent);
 }

**端末からの入力をシミュレートする場合 [#a718ce5f]
H/Wキーボードや端末の「戻る」「ホーム」「メニュー」ボタンの押下をシミュレートする場合は、
sendKey()メソッドを使用して、入力したいボタンに対応するキーコードイベントを送信します。
sendKey()の引数に指定するintには、KeyEventクラスに用意された定数を使用します。