我一直在寻找如何将 ViewModel 注入测试以便进行测试。假设 viewmodel 有一个带有一些业务逻辑交互器的构造函数注入。我可以很容易地将它注入到片段中,但在测试中没有成功。
@HiltAndroidTest
class ViewModelTest
val randomViewmodel: RandomViewmodel// now what ? since by viewModels() is not accessible in tests
@Test
fun viewModelTet() {
randomViewmodel.triggerAction()
assertEquals(RandomVIewState(1), randomViewmodel.getState())
}
我试图在测试类中实现 byViewModels() 并且可以在没有构造函数参数的情况下注入 viewmodel 但没有成功。
class RandomViewmodel @ViewModelInject constructor(
private val randomInteractor: RandomInteractor
) : ViewModel
Caused by: java.lang.InstantiationException: class app.RandomViewModel has no zero argument constructor
原因:我希望能够完全测试我的屏幕逻辑,因为 viewModel 将处理对交互器等的依赖关系。随着各种数据的流动,背后可能有很多逻辑。测试片段很可能是可能的,但在具有大量测试的大型项目中速度较慢。
我已经阅读了https://developer.android.com/jetpack/guide#test-components,它建议在 viewModel 中进行 JUnit 测试和模拟依赖项,但是您必须分别为每个依赖项创建测试并且不能真正测试整个屏幕的逻辑