はじめに
Androidの生産性と品質向上の為に避けては通れない単体テスト。
そんな単体テストの自動化を行うためのフレームワークJunit。
試しに使ってみようと思いましたが使い方が全く分からない。
取りあえず色んなサイトや記事を見て分かった事を簡単にまとめました。
環境
- Windows7 64bit Professional
- Android Studio 2.1.3
- Junit4.12
srcフォルダ直下にあるandroidTestとtestの違い
srcフォルダの直下を見るとandroidTestとtestのフォルダが存在している。
どちらもtestの単語が入っているので違いが分かり辛い。
違いは以下の通り
-
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ファイルを追加します。
そして下記のようにメソッドを実装します。
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の設定が消えている場合はこちらを参照して下さい。
テストクラスを新規作成
Calculatorクラスにカーソルを当てるかクラス内で右クリックでGo To
からTest
を選択する(あるいは Shit+Ctrl+T)
app/java/hoge.unittest(test)/
直下にCalculatorTest.javaが出来る。
作成されたクラスにテスト記述
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)
一見面倒ですが、一度テストを作ってしまえば使い回しが聞くので効率は上がると思います。