というわけでさっそく使ってみましょう。
ハイライトとしては以下のとおりです。
1.ActivityInstrumentationTestCase2を継承する
2.パッケージとテストしたいクラスを指定したコンストラクタを作成
3.テスト準備を行うsetUpメソッドを記述する
4.試験する項目ごとに、testで始まるメソッド名を付け、テスト内容を記述する
えっと、先に参考サイトは
こちら
テスティングフレームワーク JUnit
と
こちら
AndroidアプリケーションをJUnitでテストする
ですね。
では、さっそくコードです。
・・・その前にテストプロジェクトを作成しましょう。
New -> Android TestProjectで作成します。
画面としてはこんな感じです。
今回は前回使用したプロジェクト(checkBoxAcitivy)を使用します。
では、コードをみていきましょう。
1.ActivityInstrumentationTestCase2を継承する
- public class CheckActivityTest extends ActivityInstrumentationTestCase2<checkactivity> {
- }
- </checkactivity>
JUnitだとTestCaseなんですが、Androidはこちらを使用するとのことです。
Activityだからかな。
次。
2.パッケージとテストしたいクラスを指定したコンストラクタを作成
- public CheckActivityTest() {
- super("jp.co.mogakana.check.test",CheckActivity.class);
- }
クラスを指定してやら無いといかんということですね。
では次。
3.テスト準備を行うsetUpメソッドを記述する
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- // Activityを取得
- mActivity = getActivity();
- // リソースを紐付け
- mCheckTooth = (CheckBox) mActivity.findViewById(R.id.toothCheck);
- mCheckHair = (CheckBox) mActivity.findViewById(R.id.hairCheck);
- mCheckBody = (CheckBox) mActivity.findViewById(R.id.bodyCheck);
- }
ここはあんまり説明するまでもないかもしれませんが。
テストで使用するActivityを取得します。
4.試験する項目ごとに、testで始まるメソッド名を付け、テスト内容を記述する
- // 歯を磨いていないかチェックする
- public void testIsCheckTooth() {
- assertFalse(mCheckTooth.isChecked());
- }
上記は単純にチェックボックスがオフになっていることを確認しています。
テスト中にUIをいじる・・・
例えばチェックボックスにチェックをいれるなどの動作をする場合は
別スレッドで動作させます。
- // 髪を磨いてチェックする
- public void testIsCheckHair() {
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mCheckHair.setChecked(true);
- }
- });
- getInstrumentation().waitForIdleSync();
- assertTrue(mCheckHair.isChecked());
- }
こんな感じですね。
実際にチェックをいれてから動作が完了するまで待ってから判定しています。
こんな感じでJUnitは使用していきます。
これはさわりだけなんで、詳しいことはまた後日・・・。
だとおもいたい。
せっかくなのでソースコードをさらしておきますのさー。
- package jp.co.mogakana.check.test.testcase;
- import android.app.Activity;
- import android.test.ActivityInstrumentationTestCase2;
- import android.widget.CheckBox;
- import jp.co.mogakana.check.test.CheckActivity;
- import jp.co.mogakana.check.test.R;
- /* 1.ActivityInstrumentationTestCase2を継承する */
- public class CheckActivityTest extends ActivityInstrumentationTestCase2<checkactivity> {
- // Activity用
- private Activity mActivity;
- // CheckBox1用
- private CheckBox mCheckTooth;
- private CheckBox mCheckHair;
- private CheckBox mCheckBody;
- /* 2.パッケージとテストしたいクラスを指定したコンストラクタを作成 */
- public CheckActivityTest() {
- super("jp.co.mogakana.check.test",CheckActivity.class);
- }
- /* 3.テスト準備を行うsetUpメソッドを記述する */
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- // Activityを取得
- mActivity = getActivity();
- // リソースを紐付け
- mCheckTooth = (CheckBox) mActivity.findViewById(R.id.toothCheck);
- mCheckHair = (CheckBox) mActivity.findViewById(R.id.hairCheck);
- mCheckBody = (CheckBox) mActivity.findViewById(R.id.bodyCheck);
- }
- /* 4.試験する項目ごとに、testで始まるメソッド名を付け、テスト内容を記述する */
- // 歯を磨いていないかチェックする
- public void testIsCheckTooth() {
- assertFalse(mCheckTooth.isChecked());
- }
- // 髪を磨いてチェックする
- public void testIsCheckHair() {
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mCheckHair.setChecked(true);
- }
- });
- getInstrumentation().waitForIdleSync();
- assertTrue(mCheckHair.isChecked());
- }
- // 体を洗って戻して(?)チェックする
- public void testIsCheckBody() {
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mCheckBody.setChecked(true);
- mCheckBody.setChecked(false);
- }
- });
- getInstrumentation().waitForIdleSync();
- assertFalse(mCheckBody.isChecked());
- }
- }
- </checkactivity>