@blog.justoneplanet.info

日々勉強

androidでJUnitを使ってテストする

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

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment