AndroidStudio
junit4

AndroidStudioのJunit4備忘録

More than 1 year has passed since last update.

はじめに

Androidの生産性と品質向上の為に避けては通れない単体テスト。
そんな単体テストの自動化を行うためのフレームワークJunit。

試しに使ってみようと思いましたが使い方が全く分からない。
取りあえず色んなサイトや記事を見て分かった事を簡単にまとめました。

環境

  • Windows7 64bit Professional
  • Android Studio 2.1.3
  • Junit4.12

srcフォルダ直下にあるandroidTestとtestの違い

srcフォルダの直下を見るとandroidTestとtestのフォルダが存在している。
どちらもtestの単語が入っているので違いが分かり辛い。

Test.PNG

違いは以下の通り

  • src/androidTest

    • AndroidのUIを使ったテストを書くためのフォルダ(Androidに依存)
    • GradleでAndroidJUnitRunnerを設定する必要がある
    • GradleでandroidTestCompileでテスト用のライブラリを指定する必要がある
    • Android Instrumentation Test(s)と呼ばれている
  • src/test

    • API呼出用クラスなどAndroidに依存しないテストを書くためフォルダ
    • GradleでtestCompileでテスト用のライブラリを指定する必要がある
    • Unit Test(s)と呼ばれている

UnitTestを行う

UnitTestはAndroidに依存しないクラスの単体テストを行う事が出来ます。
Android Studioで新規プロジェクトを立ち上げれば、以下のようにGradleに依存関係が組み込まれているのですぐにでも使うことができます。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.2.0'
    testCompile 'junit:junit:4.12'
}

AndroidStudioでUnitTestを行う こちらのサイトをまんま使わせて頂きました。
ここから書かれている内容は自分が分からなかった部分を補足してるだけです。

新しいプロジェクトを作る

なんでもいいので新しいプロジェクトを作って下さい。
ちなみに自分はこんな感じにしました。

  • Application name: UnitTest
  • Company Domain: hoge
  • Min SDK: API19
  • Empty Activity

テスト用のクラスを追加します

app/java/hoge.unittest/直下にCalculator.javaファイルを追加します。
キャプチャ2.PNG

そして下記のようにメソッドを実装します。

package hoge.unittest;

public class Calculator {

    public int sum(int a, int b) {
        return a + b;
    }

    public int substract(int a,int b){
        return 0;
    }
}

Test Artifact

を変更

Test Artifact項目からテストの種類をUnitTestに変更します。
Test Artifact.PNG

Test Artifactの設定が消えている場合はこちらを参照して下さい。

テストクラスを新規作成

Calculatorクラスにカーソルを当てるかクラス内で右クリックでGo ToからTestを選択する(あるいは Shit+Ctrl+T)

Create New Testを選択する
create.png

テスト項目を作りたいメソッドにチェックを入れる
CreateTest.PNG

app/java/hoge.unittest(test)/直下にCalculatorTest.javaが出来る。
05.PNG

作成されたクラスにテスト記述

package hoge.unittest;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

public class CalculatorTest {

    private Calculator mCalculator;

    @Before
    public void setUp() throws Exception {
        mCalculator = new Calculator();
    }

    @Test
    public void testSum() throws Exception {
        //予想:1 + 5 で 6が返ってくるはず
        assertEquals(6, mCalculator.sum(1, 5), 0);
    }

    @Test
    public void testSubstract() throws Exception {
        assertEquals(2, mCalculator.substract(5, 3), 0);
    }
}

assertEquals はテストメソッドと呼ばれるJunitフレームワークが提供するテスト用メソッドです。

テスト用メソッド

Junit4で使えるテストメソッドはGithubのjunitチームのWikiにありますがWikiとはメソッドが羅列してあるだけでほとんど説明がないですね(まぁよく見ればどんなメソッドか何となく分かりますが)

代表的なJUnit4のアノテーション

初めてならこっちの方の理解が重要かも

  • @Test
    • テストメソッドの宣言
    • 引数を保たないpublicメソッドにする
    • @Test(expected=Exception.class)で例外がでるテスト
  • @Before
    • メソッド名は setUp で定義されている
    • 初期化 メソッド実行前の処理(メソッド毎に必ず呼ばれる)
    • 引数を保たないpublicメソッドにする
  • @After
    • メソッド名は tearDown で定義されている
    • 後処理 メソッド実行後の処理(メソッド毎に必ず呼ばれる)
    • 引数を保たないpublicメソッドにする
    • 必ず行わなければならない後処理を記載する
  • @Ingnore
    • テスト実行除外
    • 一時的に実行したくない時に使う

テスト起動

テストは、CalculatorTestクラスにカーソルを当てるかクラス内で右クリックでRun CalculatorTestを選択する(あるいは Shit+Ctrl+F10)

成功時画面
success.PNG

失敗時画面
Faild.PNG

一見面倒ですが、一度テストを作ってしまえば使い回しが聞くので効率は上がると思います。