2011年8月4日木曜日

[Android] JUnitで単体テストをする

前回の記事の補足になってしまいますが、
前回の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));
  
 }

}


今日も素敵にノイローゼ★

1 件のコメント:

  1. こんにちは。

    アンドロイド、益々充実してきますでしょうかね。

    返信削除