🐈
【Android】Must run under a registering instrumentation の対処法
コンストラクタで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)
}
}
原因
getApplicationContext
でContext
を取得しているため、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