ViewModel Testing
The core-test module provides a ViewModelTest base class that sets up the testing environment for Arkitekt ViewModels.
Setup
ViewModelTest configures:
InstantTaskExecutorRule— makes LiveData operations synchronousCoroutineScopeRule— sets theMaindispatcher toUnconfinedTestDispatcherfor immediate coroutine execution
Basic Test
class DetailViewModelTest : ViewModelTest() {
private lateinit var viewModel: DetailViewModel
private lateinit var viewState: DetailViewState
@Before
fun setUp() {
viewState = DetailViewState()
viewModel = DetailViewModel(viewState)
}
@Test
fun `increment number updates state`() {
viewModel.incrementNumber()
assertEquals(1, viewState.number.value)
}
}
Testing Events
Use MockK's spyk to verify that events are sent:
viewModel = spyk(HomeViewModel(viewState), recordPrivateCalls = true)
viewModel.onDetail()
verify { viewModel.sendEvent(ShowDetailEvent) }
Overriding the Worker Dispatcher
By default, use cases run on Dispatchers.IO. In tests, override getWorkerDispatcher() to run everything on the Main (test) dispatcher:
every { viewModel.getWorkerDispatcher() } returns Dispatchers.Main
This ensures use case execution is synchronous and predictable in tests.