问题
I have a View Model
that extends AndroidViewModel
class MoveViewModel(application: Application): AndroidViewModel(application),CoroutineScope{
....
}
And I want to unit test it but I cannot figure out how to Mock the Application class
@Test
fun testSearchDataValidation() {
val application = Mockito.mock(Application::class.java)
val viewModel = MoveViewModel(application)
.....
}
But when I go to run the test I get an error that Mockito
cannot mock Application
org.mockito.exceptions.base.MockitoException: Mockito cannot mock this class: class android.app.Application.
Mockito can only mock non-private & non-final classes.
How do I mock the Application class to pass it to my view model?
Edit:
Here is my folder hierarchy as suggested by @farhanjk
回答1:
Mockito.mock(Application::class.java)
In your test
folder, create a hierarchy like following:
In the org.mockito.plugins.MockMaker
file, just put a one-liner text mock-maker-inline
.
Mock the unmockable: opt-in mocking of final classes/methods
来源:https://stackoverflow.com/questions/55599337/how-to-mock-application-class-to-unit-test-viewmodel