Android Studio + Robolectricで自動テスト
Androidでの自動テストはRobolectricというフレームワークを使うのが良いと聞いたので導入してみました。
導入方法と僕が詰まった箇所の解決法を書いておきます。
導入方法は
【Android】Android Studio + Gradle + Robolectric!でテストをしよう | Yohei Blog
こちらを参考にさせて頂きました。
公式サイトは Robolectricです。
導入方法
build.gralde
project直下のbuild.gradleにclasspath 'org.robolectric~
を追記します。
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' classpath 'org.robolectric:robolectric-gradle-plugin:0.12.+' } }
app/build.gradle
apply plugin: 'android' //プラグイン追加 apply plugin: 'robolectric' android{ //〜中略〜// } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) //ライブラリを追加 androidTestCompile('junit:junit:4.+') androidTestCompile('org.robolectric:robolectric:2.3+') androidTestCompile('com.squareup:fest-android:1.0+') } //robolectricの設定を追記 robolectric { include '**/*Test.class' exclude '**/espresso/**/*.class' maxHeapSize = "2048m" // エラーの原因かもしれない }
テスト用クラスを作成
クラスを作成するディレクトリはapp/src/test/java
になります。
packageはメインのプロジェクトと同じにしてください。
@RunWith(RobolectricTestRunner.class) @Config(emulateSdk = 18) //後述 public class SampleTest { @Before public void setup() { // setup } @After public void teardown() { // teardown } @Test public void sampleTest() { Assert.assertTrue("assert",true); } }
テスト実行
~/.gradlew clean check
BUILD SUCCESSFUL
となれば成功です。
1 test completed, 1 failed :app:testDebug FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:testDebug'. > There were failing tests. See the report at: file://~/app/build/test-report/debug/index.html * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 16.035 secs
上記のように出力された場合はテストが失敗しています。
テストレポートは{project}/app/build/test-report/debug/index.html
で確認できます。
上手くいかない場合
パッケージorg.junitは存在しません
まず最初に、ビルド時にorg.junitは存在しません
というエラーが出ました。
app/src/test/java
ディレクトリは、android studio上でNew→Folder→Java Folder
という手順で作成しましたが、その際に
app/build.gradle
にこのように追記されていました。
SourceSets { androidTest.setRoot('src/test') main { java.srcDirs = ['src/main/java', 'src/test/java'] } }
フォルダ作成時にどのような手順をとれば良いかはわかりませんが、上記をこのように変更することでビルドが通ります。
SourceSets {
androidTest.setRoot('src/test')
}
too small initial heap
次に、too small initial heap
というエラーが出ました。
app/build.gradle
のプラグイン設定でmaxHeapSize
という項目を削除したら解決しましたが、この記事を書くために再び追記してみたらエラーは出ませんでした...。謎です。
java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException
というエラーが出た場合はsdkがサポートされていないということなので、アノテーションで@Config(emulatedSdk = 18)
と記述してやれば解決します。
長くなってしまいましたが導入にかなり苦戦してしまったので、同じようなエラーで悩んでいる方の一助となれば幸いです。