くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Android Best Practiceに学ぶ - Test frameworks編のユニットテスト

前回の記事の第二弾。Test frameworks編。

wannabe-jellyfish.hatenablog.com

というか、Android StudioRobolectricを使えるようにする編。の備忘録。

| AndroidStudio | 1.3 | | Robolectric | 3.0 | | Android Build Tools | 22.0.1 | | com.android.tools.build:gradle | 1.2.3 |

参考にした偉大なるサイト様

Best PracticeなTest frameworks

Best Practiceで行っていることは2つ 1. viewを使わないUnitテストにはRobolectricを使おう 1. viewを使うUIテストには、Robotiumを使おう

ただ、EspressoがAndroidのTesting Libに含まれるようになったので、Robotiumの代わりにEspressoを使うのが、今のPracticeっぽい。 - Espresso 2.0 is here! “A release is never too late, nor is it too early. It… - Testing UI for a Single App | Android Developers

Robolectricを使おう

Robolectricはユニットテスト用のテストフレームワークで、JUnitでテストするかのようにJVM上で実行できる優れもの。

JVM上で動かせるのでEmulatorもいらず、簡単に早くテストを実施できるのです!

ただ、Emulatorを使わないので、View関連のテストはできないのですが、Modelやライブラリのテストには重宝します

AndroidStudioでRoboletricを使うときには、いろいろ手間がかかるよう。。。

ポイントは以下の3点

  1. テストケースの置き場所
  2. src/androidTestではなく、src/testに配置する
  3. build.gradleの書き方
  4. dependenciesにtestCompile "org.robolectric:robolectric:3.0"を追加する
  5. androidTestCompileではなく、testCompileであることに注意!
  6. Build VariantsのTest ArtifactをUnit Testsにする
  7. デフォルトだとAndroid Instrumentation Testsになってるので変更する
  8. Unit Testにしないと、AndroidStudio上で実行できない。。。

あとはこんな感じで、アサーションをつければOK!

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.KITKAT)
public class ApplicationTest {

    @Before
    public void setup() {
        ・・・
    }

    @Test
    public void testSearchByQuery() {
        ・・・
    }
}

$./gradlew testでも実行してくれます!

「Espressoを使おう」編はまた次回!以上!