秋葉原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();
}