この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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テストの記述やテストダブルの使用ができるようになります。