まぁ、今さら感満載なのですが^^;;;
今日は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")); } }