Android Studio で JUnit4 を利用する【基礎編】
Android Studio を使用して、 JUnit4 のテストを記述してみましょう。
ひとまず、UIテスト用のフレームワークやモックフレームワークは使用せず、最小構成で動かしてみます。
準備
まず、 Android Studio で適当なプロジェクトを用意します。
JUnit4 を使用するために、まずはプロジェクトルートの build.gradle を開き、ビルドツールのバージョンが 1.0.0
以上であることを確認して下さい。
dependencies { classpath 'com.android.tools.build:gradle:1.0.0' // or greater }
次に、プロジェクトフォルダ直下 (通常は app ) の build.gradle を次のように変更します。
android { defaultConfig { // ... testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // 追加 } } dependencies { // ... androidTestCompile 'com.android.support.test:testing-support-lib:0.1' // or greater androidTestCompile 'org.hamcrest:hamcrest-library:1.3' // or greater }
これで、最小構成のセットアップが完了しました。
テスト記述
基本的には JUnit4 の記述方法そのままです。 JUnit4 の記述方について詳しく知りたい方は、JUnit実践入門 お勧めです!
一点、注意しなければならないのは、テストランナーに AndroidJUnit4
を指定しなければならない点です。
では実際に記述してみましょう!
// 適宜 import @RunWith(AndroidJUnit4.class) public class IntegerTest { Integer sut; @Before public void setUp() throws Exception { sut = new Integer(1); } @Test public void 値は1である() throws Exception { assertThat(sut, is(1)); } }
Android Studio の Run > Edit Configuration
から、テスト用のビルドコンフィグを作成して、テストを実行してみてください。
では次に、 Enclosed ランナーを使用して、テストのコンテキスト毎にテストを分けて記述してみましょう。
// 適宜 import @RunWith(Enclosed.class) public class IntegerTest { @RunWith(AndroidJUnit4.class) public static class 初期値が10 { Integer sut; @Before public void setUp() throws Exception { sut = new Integer(10); } @Test public void 値が10である() throws Exception { assertThat(sut, is(10)); } } @RunWith(AndroidJUnit4.class) public static class 初期値が20 { Integer sut; @Before public void setUp() throws Exception { sut = new Integer(20); } @Test public void 値が10ではない() throws Exception { assertThat(sut, is(not(10))); } } }
現在のところ、用意されたデフォルトの AndroidJUnit4
ランナー を使う場合、 Theories
ランナーや Categories
ランナーを使う出来ません。
よね…? 自分でランナー用意しなくても Theories 使えたよ!という方居られましたら、情報お待ちしています。
今回の前提(最小構成でテストを記述)とは関連しませんが、 Enclosed.class
をランナーに指定した場合、そのクラス内のテストからは、Contextを取得するため等に使用する InstrumentationRegistry
が利用できません。
まとめ
Android Studio / Gradle を使用しているならば、たったこれだけのことで JUnit4 が利用可能になります。
もう Android でテストを書かない理由がない!
今回は最小構成編ということで紹介できていませんが、 Espresso や mockito といった強力なフレームワークと合わせると、UIテストの記述やテストダブルの使用ができるようになります。