前回のActivityInstrumentationTestCase2は「機能テスト」を行うためでした。
機能テストはその機能がテストするかどうかのテストです。
次は「単体テスト」をやりましょう。
Activityの単体テストということで、開始→終了までをテストします。
今回の流れはこちら。
1.ActivityInstrumentationTestCaseを継承する
2.テストしたいクラスを指定したコンストラクタを作成
3.テスト準備を行うsetUpメソッドを記述する
4.Activityを終了させる(この場合はBACKボタンの押下)
基本的には動作を変えただけですが。
UIをいじっての終了ではなく、ハードキー動作での終了なので
わりと簡素なコードになってます。
さ、順番に見ていきましょう。
1.ActivityInstrumentationTestCaseを継承する
/* 1.ActivityInstrumentationTestCaseを継承する */ public class CheckActivityTest2 extends ActivityUnitTestCase{ }
*ソースコードにとありますが、エディタの補完機能でこうなっているだけです。無視してください。
今回は単体テストなので(Activity全体のテスト)、ActivityInstrumentationTestCaseを継承して使います。
2.テストしたいクラスを指定したコンストラクタを作成
/* 2.テストしたいクラスを指定したコンストラクタを作成 */ public CheckActivityTest2() { super(CheckActivity.class); }
コンストラクタはクラス名のみ指定で。
次。
3.テスト準備を行うsetUpメソッドを記述する
/* 3.テスト準備を行うsetUpメソッドを記述する */ @Override protected void setUp() throws Exception { super.setUp(); // Activityの起動 startActivity(new Intent(), null, null); // Activityを取得 mActivity = getActivity(); }
自力でActivityを起動して取得しています。
次。
4.Activityを終了させる(この場合はBACKボタンの押下)
/* 4.Activityを終了させる(この場合はBACKボタンの押下) */ public void testPushBackButton() { KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK); assertTrue(mActivity.dispatchKeyEvent(event)); }
本当はActivityが終了したら~という判定になると思うんですが、
そのあたりが未調査(おい)なので、BACKボタンの判定をしています。
うまいかんじにおせたらテストOKとしています。
Activityに何かさせる場合はその都度テストがいるのだとおもいますが、
そのあたりは機能テストで網羅させて単体テストでは開始→終了のサイクルがみれればいいかなーともおもっていたり。
なんつか技術者的にそれはいいのか?とも思うのですが、それもそのうち。
どうにかしたいです。
では本日のソースコードをのせておわりにします。
package jp.co.mogakana.check.test.testcase; import android.app.Activity; import android.content.Intent; import android.test.ActivityUnitTestCase; import android.view.KeyEvent; import jp.co.mogakana.check.test.CheckActivity; /* 1.ActivityInstrumentationTestCaseを継承する */ public class CheckActivityTest2 extends ActivityUnitTestCase{ // Activity用 private Activity mActivity; /* 2.テストしたいクラスを指定したコンストラクタを作成 */ public CheckActivityTest2() { super(CheckActivity.class); } /* 3.テスト準備を行うsetUpメソッドを記述する */ @Override protected void setUp() throws Exception { super.setUp(); // Activityの起動 startActivity(new Intent(), null, null); // Activityを取得 mActivity = getActivity(); } /* 4.Activityを終了させる(この場合はBACKボタンの押下 */ public void testPushBackButton() { KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK); assertTrue(mActivity.dispatchKeyEvent(event)); } }
今日も素敵にノイローゼ★
こんにちは。
返信削除アンドロイド、益々充実してきますでしょうかね。