Таким образом, я пытаюсь написать модульный тест для моей Деятельности, используя Robolectric, однако я не знаю, как предоставить смоделированную модель представления, видящую, как мой vm создается непосредственно в классе.Это связано с тем, что ViewModel с поддержкой жизненного цикла Jetpack требует класса Provider для создания экземпляра.Итак, я в основном внедряю пользовательский поставщик, а затем использую его для создания моей ViewModel.Я смотрел на другие примеры, но все они кажутся очень запутанными.Как мне добиться этого?
class ActivityEpisodeList : AppCompatActivity() {
@Inject
lateinit var vmFactory: ViewModelProvider.Factory
private lateinit var vm: ActivityViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_episode_list)
MvvmDaggerApp.get(this).appComponent.inject(this)
vm = ViewModelProviders.of(this, vmFactory)[ActivityViewModel::class.java]
}
}
Вот как я создаю свою ViewModel:
@Module
abstract class ViewModelModule {
@Binds
internal abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
@Binds
@IntoMap
@ViewModelKey(ActivityViewModel::class)
internal abstract fun postListViewModel(viewModel: ActivityViewModel): ViewModel
}
@Singleton
class ViewModelFactory @Inject constructor(private val viewModels: MutableMap<Class<out ViewModel>, Provider<ViewModel>>) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T = viewModels[modelClass]?.get() as T
}
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
@MapKey
internal annotation class ViewModelKey(val value: KClass<out ViewModel>)