秋葉原Androidアプリ開発勉強会に行ってきたヽ(•̀ω•́ )ゝ✧自分の題材はユニットテスト。
iOSアプリケーションではテストをするためにターゲットを追加する。androidではテストするためにプロジェクトを作る。
■テストプロジェクト
Package Explorerで右クリック「New > Others > Android Test Project」を選択し、Test Targetに既存のアプリを指定して「Finish」をクリックする。
■テストクラス
パッケージで右クリック、「New > Class」を選択して以下のように入力する。
Name | MainActivityTest |
---|---|
Superclass | android.test.ActivityInstrumentationTestCase2<MainActivity> |
MainActivityをimportし、コンストラクタの引数を除去して以下のようにする。
public MainActivityTest() { super("info.justoneplanet.android.mainactivity", MainActivity.class); setActivityInitialTouchMode(false); }
■テストコード
以下のようにとりあえず書いてみた。
package info.justoneplanet.android.sample.test; import info.justoneplanet.android.sample.MainActivity; import android.app.Instrumentation; import android.content.Context; import android.test.ActivityInstrumentationTestCase2; import android.text.ClipboardManager; import android.util.Log; import android.widget.LinearLayout; import android.widget.TextView; import info.justoneplanet.android.sample.R; public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { private MainActivity mActivity; private Instrumentation mInstrumentation; public MainActivityTest() { super("info.justoneplanet.android.mainactivity", MainActivity.class); setActivityInitialTouchMode(false); } @Override protected void setUp() throws Exception { super.setUp(); mActivity = getActivity(); mInstrumentation = getInstrumentation(); } @Override protected void tearDown() throws Exception { super.tearDown(); mActivity = null; mInstrumentation = null; } /** * testPushList * まあサンプル */ public void testPushList() { mActivity.runOnUiThread(new Runnable() { @Override public void run() { // テスト対象アプリのUIを制御するコードはこっちに書くよ MainActivityTest.assertEquals(true, true); } }); mInstrumentation.waitForIdleSync(); assertEquals(true, true); } }
ちなみに「みんなの顔文字辞典」のテストケース(一部)は以下のようになっている。
/** * testPushList * タップした部分の顔文字とクリップボードの顔文字が同じかテストする */ public void testPushList() { mActivity.runOnUiThread(new Runnable() { private int position = 0; private LinearLayout item; /** * getClipBoardText * クリップボードのテキストを取得して返す * @return */ private String getClipBoardText() { ClipboardManager cm = (ClipboardManager) mActivity.getSystemService(Context.CLIPBOARD_SERVICE); Log.e("face", (String) cm.getText()); return (String) cm.getText(); } /** * getFaceInListItem * ListViewのitemの中に含まれる文字列を返す * @param item * @return */ private String getFaceInListItem(LinearLayout item) { String face = (String) ((TextView) item.findViewById(R.id.list_face)).getText(); Log.e("face", face); return face; } /** * getListItemByTappedPosition * indexを指定してListViewの中のitemを返す * @param position * @return LinearLayout item */ private LinearLayout getListItemByTappedPosition(int position) { LinearLayout item = (LinearLayout) mActivity.getListView().getChildAt(position); Log.e("result", String.valueOf(mActivity.getListView().performItemClick(item, position, 0)));// tap! return item; } @Override public void run() { position = 0; item = getListItemByTappedPosition(position); KaomojiEveryoneTest.assertEquals(getFaceInListItem(item), getClipBoardText()); position = 5; item = getListItemByTappedPosition(position); KaomojiEveryoneTest.assertEquals(getFaceInListItem(item), getClipBoardText()); position = 10; item = getListItemByTappedPosition(position); KaomojiEveryoneTest.assertEquals(getFaceInListItem(item), getClipBoardText()); } }); mInstrumentation.waitForIdleSync(); }