3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AndroidでのUnitTestざっくり入門

Last updated at Posted at 2020-08-19
  • Android Studio 4.0.1
  • Kotlin: 1.3.72
  • robolectric:4.3
  • Windows 10

Androidアプリ開発でUnitTestをします。
出来る限り実機やエミュレータを使わず、JavaVM上で動かしサクサクテストできるような環境を目指します。

テストケースの種類

InstrumentedTest

  • app/src/androidTest
  • 実機もしくはエミュレータ上で実行される
  • ExampleInstrumentedTest.ktというサンプルが作られる
  • 今回は、こちらはできるだけ使用しない方針です。

UnitTest

  • app/src/test
  • PCのJavaVM上で実行される
  • ExampleUnitTest.ktというサンプルが作られる
  • 今回はこちらをメインで使用していきます。

テストケース実行

  • Android Studio にて該当のパッケージ、クラス、メソッドで右クリック→ Run Testsで実行できる

テストケース作成

  • 該当の パッケージ名(androidTest) もしくはパッケージ名(test) にクラスを作成
  • 実行するテストメソッドに@Testをつけます
SampleUnitTest.kt
package jp.co.sankosc.sample

import org.junit.Assert.*
import org.junit.Test

class SampleUnitTest {
    @Test
    fun addition_isCorrect() {
        assertEquals(4, 2 + 2)
    }
}

robolectricの準備

bundle.gradle(app)
android {
  testOptions {
    unitTests {
      includeAndroidResources = true
    }
  }
}

dependencies {
  testImplementation 'org.robolectric:robolectric:4.3'
}

sdk=29では動かなかったため、robolectricをskd=28で実行するよう設定します。
app/src/test/resources/[パッケージ] にrobolectric.propertiesファイルを作成します

app/src/test/resources/jp/co/sankosc/sample/robolectric.properties
sdk=28

Activityのテスト

SampleUnitTest.kt
package jp.co.sankosc.sample

import android.widget.TextView
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner

@RunWith(RobolectricTestRunner::class)
class SampleUnitTest {
    @Test
    fun testActivity() {
        val activity:MainActivity = Robolectric.buildActivity(MainActivity::class.java).setup().get()
        val text = activity.findViewById<TextView>(R.id.textView).text
        Assert.assertEquals("Hello World!", text)
    }
}

Realmについて

いろいろ試行錯誤しましたが、RealmをRobolectric使ってUnitTestで動かすことはできませんでした。RealmのテストはInstrumentedTestの方でやるしかなさそうです。

また、Realmを使ったアプリを作っているとUnitTestが動かなくなる場合があります。
Realmの初期化を、Applicationクラスで行っている場合で、この場合はテストのときはApplicationクラスでRealmの初期化をしないようにしておく必要があります。

何もしないApplicationクラスを作る

AppUnitTest
package jp.co.sankosc.sample

import android.app.Application

class AppUnitTest : Application()

robolectric.propertiesでRobolectricのApplicationクラスを指定する

app/src/test/resources/jp/co/sankosc/sample/robolectric.properties
sdk=28
application=jp.co.sankosc.sample.AppUnitTest

Realmの準備はこちらをご参照ください:Android,KotlinでRealm

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?