🐈

【Android】Must run under a registering instrumentation の対処法

2022/04/01に公開

コンストラクタでApplicationを必要とするViewModelのテストを書いているときに、以下のエラーが発生しました。

エラーメッセージ

No instrumentation registered! Must run under a registering instrumentation.
java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.
	at androidx.test.platform.app.InstrumentationRegistry.getInstrumentation(InstrumentationRegistry.java:45)
	at androidx.test.core.app.ApplicationProvider.getApplicationContext(ApplicationProvider.java:41)

Test

class SampleViewModelTest {

    private lateinit var viewModel: SampleViewModelTest

    @Before
    fun setUp() {
        // Error
        val application = ApplicationProvider.getApplicationContext<Application>()
        viewModel = SampleViewModelTest(application)
    }
}

原因

getApplicationContextContextを取得しているため、Robolectric が必要でした。

修正

app/build.gradle

dependencies {
    // 追加
    testImplementation 'org.robolectric:robolectric:4.4'
}

SampleViewModelTest.kt

// アノテーションを追加
@RunWith(RobolectricTestRunner::class)
class SampleViewModelTest {

    private lateinit var viewModel: SampleViewModelTest

    @Before
    fun setUp() {
        val application = ApplicationProvider.getApplicationContext<Application>()
        viewModel = SampleViewModelTest(application)
    }
}

Discussion

ログインするとコメントできます