まぁ、今さら感満載なのですが^^;;;
今日はAndroidの単体テストをする方法について記述していこうと思います。
まず、テストプロジェクトを用意します!
これはEclipseのAndroid Unit Test Projectを作成すればいいので
特に説明はいらないと思います!
あ!そうそう、一つだけ!!!
単体テストをしたいアプリのプロジェクトを指定するところが
ありますので、そこだけはちゃんと指定してください^^
さて、プロジェクトを作った後ですが、Activityをテストする
場合には、以下のように、「ActivityInstrumentationTestCase2」から
派生させてください。
で、そのクラスにテストケースを記述していく訳ですが、
命名規則(?)があります。
public void testXXXX()
のように、testから始まる関数がテストケースになります。
例えば、あるボタンの単体テストを記述する時には、
public void testButton()
などのようになるわけです。
以下にサンプルソースを乗せておきます!
サンプルでは、Acitivity1というActivityの、ボタンとオプションメニューの
動作をテストするサンプルです!
後は応用と発想力(?)です^^
この他にSDKには、モンキーテストをするためのツールもあるようです!
詳しくは調べてないのですが、
「adb ごにょごにょ monkey ごにょごにょ」
というように、コマンドラインから実行できるみたいです!
Let's Try Unit Test.
あ!
ちなみに、Androidの単体テストのベースはJUnitです!
今日はAndroidの単体テストをする方法について記述していこうと思います。
まず、テストプロジェクトを用意します!
これはEclipseのAndroid Unit Test Projectを作成すればいいので
特に説明はいらないと思います!
あ!そうそう、一つだけ!!!
単体テストをしたいアプリのプロジェクトを指定するところが
ありますので、そこだけはちゃんと指定してください^^
さて、プロジェクトを作った後ですが、Activityをテストする
場合には、以下のように、「ActivityInstrumentationTestCase2」から
派生させてください。
で、そのクラスにテストケースを記述していく訳ですが、
命名規則(?)があります。
public void testXXXX()
のように、testから始まる関数がテストケースになります。
例えば、あるボタンの単体テストを記述する時には、
public void testButton()
などのようになるわけです。
以下にサンプルソースを乗せておきます!
サンプルでは、Acitivity1というActivityの、ボタンとオプションメニューの
動作をテストするサンプルです!
後は応用と発想力(?)です^^
この他にSDKには、モンキーテストをするためのツールもあるようです!
詳しくは調べてないのですが、
「adb ごにょごにょ monkey ごにょごにょ」
というように、コマンドラインから実行できるみたいです!
Let's Try Unit Test.
あ!
ちなみに、Androidの単体テストのベースはJUnitです!
package jp.developerwaiwai.test.test;
import jp.developerwaiwai.test.UI.Activity1;
import android.app.Activity;
import android.app.Instrumentation;
import android.test.ActivityInstrumentationTestCase2;
import android.view.KeyEvent;
public class TestCase1 extends ActivityInstrumentationTestCase2<Activity1> {
private Activity _activity;
private Instrumentation _instrumentation;
public TestCase1() {
super("jp.developerwaiwai.test.UI.Activity1", Activity1.class);
}
//テストを始める前に必要なものを記述する
@Override
protected void setUp() throws Exception {
super.setUp();
_activity = getActivity();
_instrumentation = getInstrumentation();
}
//テスト後に必要な後処理を記述する
@Override
protected void tearDown() throws Exception {
}
public void testOptionMenu(){
_instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
_instrumentation.invokeMenuActionSync(_activity, Activity1.optionMenuID_1, 0);
assertEquals(true , true);
}
public void testButton1() {
ActivityMonitor monitor = new ActivityMonitor("jp.developerwaiwai.test.UI.Activity2", null, false);
_instrumentation.addMonitor(monitor);
_activity.runOnUiThread(new Runnable() {
private Button button1 = (Button)_activity.findViewById(R.id.button1);
@Override
public void run() {
button1.performClick();
}
});
//UIスレッドが終了するまで待つ
_instrumentation.waitForIdleSync();
Activity next = getInstrumentation().waitForMonitorWithTimeout(monitor, 2000);
assertEquals(monitor.getHits(),1);
next.finish();
_instrumentation.removeMonitor(monitor);
TextView textView = (TextView)_activity.findViewById(R.id.textview1);
String stringOfTextView = textView.getText().toString();
assertTrue(stringOfTextView.equals("abc"));
}
}