テストコードの作成について

単体テストに関して、JUnitを使ってAndroidの自動テストをするというものであります。
一つプロジェクトを製造した後で、単体テストを実行する必要であります。
単体テストを実行されるコーディングは、品質を向上されることができます。

以下は、JUnitによるAndroidプログラムのテスト検証について記述します。

テストコードの実行手順

  1. テストしたいプロジェクトのバーションを確定する。
  2. このバーションのコードにより、テストコードを初回作成する。
  3. テストコードにとって、テストしたいプロジェクトが変更して、テストコードも変更する必要がある。
  4. テストコードの実行結果により、問題点を発生される場合、バグチケットを作成する必要がある。

JUnitについて

Javaによって開発されたプログラムに対して、単体テストを行うためのアプリケーションフレームワーク。これにより、単体テスト検証を行います。

Androidにおいて、JUnitを用いたテストに関しては以下を参照のこと。
公式
上記の翻訳

テストプロジェクトの準備について

  1. Project → New Project → Android Test Projectを選択し、「Next」を押します。

  1. Projectnameを入力し、「Next」を押します。
    Projectname命名規則:テストされるプロジェクトのプロジェクト名+"-Test"。
    例:CasioFinderのテストプロジェクト→CasioFinder-Test。

  1. Test Targetについて、「An existing Android project」をチェックし、検証したいプログラムを選択し、「Next」を押します。

  1. BuildTargetを選択し、Finishを押します。

  1. テストプロジェクトが新規されし、Junit4のライブラリーを追加します。

Junit4のライブラリーが追加された後で、Junit4のライブラリーをチェックします。

ActivityのJUnitTestCaseの作成について

ActivityのJUnitTestCaseの作成についてページに参照してください。

コンポーネントのJUnitTestCaseの作成について

コンポーネントのJUnitTestCaseの作成についてページに参照してください。

テストケースについて

テストケースは全てメソッドで表現するが、決まりごとを以下に列挙します。

  1. テストを始める前に処理を行う場合は(データベースのオープン、変数の初期化等)はsetUp( )メソッドをオーバーライドして、そこに処理を書きます。
  2. テスト終了後の処理(データベースのクローズ、メモリ解放等)はteardown( )メソッドをオーバーライドして、そこに処理を書きます。
  3. テストケースは必ず「test」から始まるメソッド名で書きます。
  4. JUnitで用意されているメソッドを以下に示します。
メソッド 説明
assertEquals(arg1, arg2) arg1とarg2が同じ値かどうか判別する。違う場合はFailure(失敗)になる。
assertEquals(msg, arg1, arg2) 上記と同様に振舞う。値が違う場合はメッセージとしてmsgを表示する。
assertTrue(boolean) 引数がtrueかどうか判別する。falseの場合はFailure(失敗)になる。
assertTrue(String, boolean) 上記と同様に振舞う。falseの場合はメッセージとしてStringの値を表示する。
assertFalse(boolean) 引数がfalseかどうか判別する。trueの場合はFailure(失敗)になる。
assertFalse(String, boolean) 上記と同様に振舞う。trueの場合はメッセージとしてStringの値を表示する。
assertNotNull(Object) 引数がNullでないか判別する。Nullだった場合はFailure(失敗)になる。
assertNotNull(String, Object) 上記と同様に振舞う。Nullだった場合はメッセージとしてStringの値を表示する。
assertNull(Object) 引数がNullかどうか判別する。Nullでなかった場合はFailure(失敗)になる。
assertNull(String, Object) 上記と同様に振舞う。Nullでなかった場合はメッセージとしてStringの値を表示する。
assertSame(Object1, Object2) Object1とObject2が同じオブジェクトを参照しているかどうか判別する。同じオブジェクトでなかった場合はFailure(失敗)になる。
assertSame(String, Object1, Object2) 上記と同様に振舞う。同じオブジェクトでなかった場合はメッセージとしてStringの値を表示する。
assertNotSame(Object1, Object2) Object1とObject2が同じオブジェクトを参照していないかどうか判別する。同じオブジェクトだった場合はFailure(失敗)になる。
assertNotSame(String, Object1, Object2) 上記と同様に振舞う。同じオブジェクトだった場合はメッセージとしてStringの値を表示する。
fail() 強制的にFailure(失敗)になる。
fail(String) 上記と同様に振舞う。Failure(失敗)の際、メッセージとしてStringの値を表示する。

テストの実行

テストを実行する前に以下の操作を行うこと。
通常、Androidにおいては、Junitのテストプロジェクトを実行してもテスト結果はxmlファイルで出力されません。 そこで、出力されるようにするために、android-junit-reportを用います。(Jenkinsでのレポート用

  1. テストプロジェクトのlibs/下に上記URLからダウンロードした 【android-junit-report-1.5.8.jar】を格納します。

  2. Manifest.xmlのinstrumentationタグのandroid:nameを 【”android.test.InstrumentationTestRunner”】から 【”com.zutubi.android.junitreport.JUnitReportTestRunner”】 に変更します。

  3. テストプロジェクトフォルダ直下に以下を記述した "custom_rules.xml"を追加します。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    <?xml version="1.0" encoding="utf-8"?>
    <project name="custom">
        <property name="reports.dir" value="bin/reports" />
        <property name="tested.project.app.package" value="(テスト対象のパッケージ名)" />
    
        <target name="fetch-test-report">
            <echo>Downloading XML test report...</echo>
            <mkdir dir="${reports.dir}" />
            <exec executable="${adb}" failonerror="true">
                <arg line="${adb.device.arg}" />
                <arg value="pull" />
                <arg value="/data/data/${tested.project.app.package}/files/junit-report.xml" />
                <arg value="${reports.dir}/junit-report.xml" />
            </exec>
        </target>
        <target name="test-and-fetch" depends="debug,install,test,fetch-test-report" />
    </project>
    
  4. eclipse上でテストを実行します テストプロジェクトで右クリック→「Run As」→「Run Configurations」をクリック

Android Junit Testのテストプロジェクトを選択し、Instrumentation runnerを【com.zutubi.android.junitreport.JUnitReportTestRunner】を選択します

テストは、メニューの「Run」→「Run As」→「Android JUnit Test」を選択します。
エミュレータ(or実機)にテスト対象アプリとテストアプリがインストールされ、テストが行われます。
その結果は以下のように、成功だと緑色、失敗だと赤色で表示されます。

その他

  1. テストメソッドの実行順は不定なので、注意すること。
  2. 上記Activity,コンポーネント以外に、Service単体のテスト、Provider単体のテストも可能で、リファレンスを参照のこと。

by 許燕