Robolectricなテストプロジェクトをgradleで動かす

2013-10-17T00:00:00+00:00 Android gradle robolectric

但し、android用のgradle pluginだとかrobolectricなgradle pluginはある模様だけどそれを使わずに素のbuild.gradleだけでごちゃごちゃとやってみた

構造的には

├── app
│   ├── AndroidManifest.xml
│   ├── assets
│   ├── bin
│   ├── build.xml
│   ├── gen
│   ├── libs
│   ├── local.properties
│   ├── proguard-project.txt
│   ├── project.properties
│   ├── res
│   ├── src
│   └── test
└── test
    ├── bin
    └── lib

な感じになっているのでテストプロジェクト側にbuild.gradleを作ってgradle testだけで実行できるように。無論、アプリプロジェクトがビルドされてR.java生成されてないと名前解決でエラーになるので(ry

apply plugin: "java"

repositories {
    mavenCentral()
}

dependencies {
    // テストするAndroidのバージョンによっては変える
    compile files("/opt/android/platforms/android-8/android.jar")

    compile fileTree(dir: "../app/libs", include: "*.jar")
    testCompile "junit:junit:4.10"
    testCompile "org.hamcrest:hamcrest-all:1.3"
    testCompile "org.mockito:mockito-all:1.9.5"
    testCompile "org.powermock:powermock-mockito-release-full:1.5.1"
    testCompile "org.robolectric:robolectric:2.2"
}

sourceSets {
    main {
        java {
            srcDir "../app/src"
            srcDir "../app/gen"
        }
    }

    test {
        java {
            srcDir "../app/test"
        }
    }
}

// そのまま動かすと「superClassName is empty」で出るので
test {
    scanForTestClasses = false
    include "**/*TestCase.class"
}

まぁ要件によってやり方変わってくるだろうし。普通にrobolectricなgradle pluginがあるらしいのでそれ使えば良いんじゃねーのって事で

追記

gradle-android-test-pluginを使いましょう。一応記事自体は残しておきます

gradle-android-toolkit+Android Studio (1) Mockitoでfinalクラスをモック化 (2)