Я довольно много искал, как внедрить 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 () в тестовом классе и мог ввести модель просмотра без аргументов конструктора, но безуспешно.
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, в которых предлагается выполнять тесты JUnit и высмеивать зависимости в viewModel, но тогда вам нужно создавать тесты для каждой зависимости отдельно, и вы не можете действительно протестировать логику для всего экрана.