I am trying to mock a view model in my UI Tests. It seems like I don't have it set up correctly, because the VM in the test activity is "not initialized".
This is what I got:
- Hilt Module that provides my VM:
@Module
@InstallIn(SingletonComponent::class)
object ApplicationModule {
@Provides
fun provideMainViewModel(sharedPreferences: SharedPreferences): MainViewModel = MainViewModel(sharedPreferences)
}
- Test Module to provide mocks:
@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [ApplicationModule::class]
)
object MockModule {
@Provides
fun provideMainViewModel(): MainViewModel = mockk(relaxed = true)
}
- In my UI test:
@HiltAndroidTest
class ExampleInstrumentedTest {
@Inject
lateinit var viewModel: MainViewModel
@get:Rule(order = 0)
var hiltRule = HiltAndroidRule(this)
@get:Rule(order = 1)
val instantTaskExecutorRule = InstantTaskExecutorRule()
private val showError = MutableLiveData<String>()
@Before
fun init() {
hiltRule.inject()
Intents.init()
every { viewModel.showError } returns showError
}
@After
fun cleanUp() {
Intents.release()
unmockkAll()
}
@Test
fun testThis() {
val activityScenario: ActivityScenario<MainActivity> = ActivityScenario.launch(MainActivity::class.java)
}
However, when I run the test, the view model is not a mock! What am I missing?