Android StudioでJunit4によるテストを走らせる
基本的にはここに書いてあるとおりにやればいいだけの話です。
/app/build.gradleのdependenciesにjunitを追加します。
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
この際に注意が必要なのは、androidTestCompile
とtestCompile
は別物であるということです。
何が別物かというと、テストコードを配置するディレクトリがそれぞれ違います。
その名の通りandroidTestCompile
はandroidTest
ディレクトリに配置したテストコードのコンパイル時にだけ使うライブラリです。同じくtestCompile
はtest
ディレクトリに配置したテストコードのみに使われるライブラリになります。
なお、androidTestディレクトリは自動的に作成されていますが、testディレクトリは自分で作らなければなりません。(ディレクトリは/app/src/test/java/パッケージ名にしてやればOK)
Build Variantsウィンドウを開くと、Test Artifact
という欄があります。
Android Instrumentation Testsを選択していると、androidTestディレクトリ以下にあるテストコードが有効化されます。有効化されるというのが適切なのかは分かりませんが、Android Studioからコンパイル対象のソースコードであると認識されます。
Unit Testsに切り替えると、testディレクトリが有効化されます。試しに切り替えてみると、androidTestディレクトリの色が変わって、テストコードのアイコンに赤いJアイコンが出るようになると思います。
IDE上からテストを実行しようと思うと、このBuild Variantsをいちいち切り替えないといけないのが面倒くさいかもしれません。
しかし、ターミナルからGradleを使って実行する場合は、このTest Artifactsの切り替えはしなくてもいいみたいです。Gradleからテストを実行する場合、./gradlew connectedAndroidTest
がAndroid Instrumentation Testsを、./gradlew test
がUnit Testsを選択してテストを実行するのと同じになります。この場合のテスト結果は/app/build/reports/tests
の中に出力されます。
テストコードはViewやActivityなどのUIに関するテストをandroidTestディレクトリに、純粋なJavaコードのテストはtestディレクトリに置くように工夫すべきでしょう。そうしてやれば、ユニットテストにかかる時間を削減できて幸せになれると思います。