I cant get application context to create Room database in tests
@RunWith(AndroidJUnit4::class)
//@RunWith(RobolectricTestRunner::class)
class AppDatabaseTest {
private lateinit var context: Context
private lateinit var database: AppDatabase
@Test
fun someTest() {
context = ApplicationProvider.getApplicationContext()
// RuntimeEnvironment.getApplication()
database = Room.inMemoryDatabaseBuilder(
context,
AppDatabase::class.java
).build()
assertEquals(2, 1+1)
}
}
When i tried to acheave that by ApplicationProvider.getApplicationContext()
it falls with next exception
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)
at com.olexii8bit.notesapp.data.room.AppDatabaseTest.someTest(AppDatabaseTest.kt:19)
And I tried RuntimeEnvironment.getApplication()
from Robolectric but it also throws an exception
getApplication(...) must not be null
java.lang.NullPointerException: getApplication(...) must not be null
at com.olexii8bit.notesapp.data.room.AppDatabaseTest.someTest(AppDatabaseTest.kt:20)
What am i doing wrong?
The solution is to create tests in androidTest
module instead of unitTest
.
Then you will be able to use context with InstrumentationRegistry.getInstrumentation().targetContext