2012年6月16日土曜日

Androidの単体テストの方法

まぁ、今さら感満載なのですが^^;;;

今日は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"));
    
    }
}

1 件のコメント:

  1. Excelでデータベースの取り込みやのデータ取得/更新するなら、ExcelDBToolをお勧めします。
    テーブルのデータをエクセルに取得、更新、削除することだけではなく、複数のSQLを実行して、結果を
    一括Excelの各シートに出力することもできます。

    http://www.superdbtool.com
    ベクターからもダウンロードできます。
    Oracle,SQL Server,DB2,Sybase,MySQL,Postgre,Sqlite対応。

    使い方動画:
    http://superdbtool.com/blog/basic-guide

    またExcelDBToolを使って、本番擬似ランダムテストデータを一括作成することは非常に簡単です。
    是非お試しください。
    作成できるダミーデータ種類(69種類):
    郵便番号, 都道府県, 企業名, 市区,町村,最寄駅,最寄駅ふりがな,路線,銀行コード, 銀行名, 銀行カタカナ, 支店コード, 支店名, 支店カタカナ,E-Mail, URL, 携帯, 苗字のみ, 氏名, 住所, 住所ふりがな,性別, 年齢, 血液型, 固定電話, 婚姻, ふりがな, 大学名,身長,体重固定値,国籍,国籍英語,国籍英語略,クレジットカード会社,クレジットカード番号,有効期限,IPアドレス,業種大分類,業種大分類名称,業種中分類,業種中分類名称,業種小分類,業種小分類名称,職種大分類,職種大分類名称,職種中分類,職種中分類名称,職種小分類,職種小分類名称,数値連番,整数・小数点数,英数混在,文字列+連番,文字列+全角連番全角漢字,ひらがな,全角カタカナ,半角カタカナ,全角英数,全角数値,全角英字,全半混在日付,時間,タイムスタンプ,特殊文字

    Oracle,SQL Server,DB2,Sybase,MySQL,Postgre,Sqliteもご利用できます。

    返信削除