1
1

More than 1 year has passed since last update.

androidのテストコードでassetsにアクセスする

Posted at

この記事の内容

AndroidTestとUniteTestの両方で、assetsにあるファイルにアクセスする方法です。
AndroidTestは、androidx.testを、UnitTestは、Robolectricをそれぞれ使用します。

androidx.testのセットアップに関しては公式をご覧ください。

dependencies

テストの依存関係は以下の通りです。

app/build.gradle
dependencies {
    // For test
    testImplementation("junit:junit:4.13.2")
    testImplementation("org.robolectric:robolectric:4.9")

    // For android test
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation("androidx.compose.ui:ui-test-junit4:$composeVersion")
}

AndroidTestで「src/androidTest/assets」にアクセスする

「InstrumentationRegistry.getInstrumentation().context」を使用します。

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Test
import org.junit.runner.RunWith
import java.io.InputStreamReader

@RunWith(AndroidJUnit4::class) // JUnit3とJUnit4が混在しているテストの時は必要です。
@LargeTest // 1秒以上かかるようなテストの場合必要です。
class SampleAndroidTest {
    @Test
    fun sample_1() {
        // 「src/androidTest/assets」にアクセスするためのコンテキストの取得方法
        val context = InstrumentationRegistry.getInstrumentation().context

        // 「src/main/assets」にアクセスするためのコンテキストの取得方法
        // val context: Context = ApplicationProvider.getApplicationContext()

        InputStreamReader(context.assets.open("sample_1.html")).use { reader ->
            println(reader.readText())
        }
    }
}

@RunWith(AndroidJUnit4::class)」は、JUnit3とJUnit4が混在しているテストの時は必要になります。
@LargeTest」は、1秒以上かかるようなテストの場合につけます。

UnitTestで「src/test/assets」にアクセスする

@Config(assetDir = "src/test/assets")を指定します。

import android.content.Context
import org.junit.Assert.*
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.annotation.Config
import java.io.InputStreamReader

@RunWith(RobolectricTestRunner::class)
@Config(assetDir = "src/test/assets")
class SampleUnitTest {
    @Test
    fun `sample 1`() {
        val context: Context = RuntimeEnvironment.getApplication()
        InputStreamReader(context.assets.open("sample_1.html")).use { reader ->
            println(reader.readText())
        }
    }
}
1
1
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
1
1