gpt4 book ai didi

android - 使用模拟 ViewModel 测试 Android ViewModelProvider

转载 作者:行者123 更新时间:2023-12-04 23:59:22 27 4
gpt4 key购买 nike

我很高兴使用新的 Android 架构组件 ViewModel 系统,它很好地将 Activity/Fragment/Layout 渲染问题与 ViewModel 逻辑分开。我已经成功地对 ViewModel 进行了独立的单元测试,现在想通过为各种状态场景的 Activity/Fragment 提供模拟的 ViewModel 来尝试一些屏幕截图测试。
我已经成功地配置了我的 androidTests 以便能够在我的设备测试中使用 Mockito,这部分效果很好。
但是,officially recommended way调用 ViewModelProvider 或委托(delegate) by viewModels<>似乎没有提供注入(inject)模拟 ViewModel 的方法。我宁愿不添加整个 DI 框架只是为了解决文档中的这个遗漏,所以我想知道是否有人有任何成功的例子来提供带有官方 Android 架构组件的模拟 ViewModel,而不需要额外的 Dagger 或 Hilt 依赖项。
The only related answer从 1 年前开始建议使用 ActivityTestRule并手动控制 Activity 生命周期,但该规则已弃用,取而代之的是 activityScenarioRule它不提供这种控制。

最佳答案

您可以使用 ViewModelProvider ,因此您可以替换 ViewModelProvider.Factory在模拟测试中。例如通过使用:

 viewModel = ViewModelProvider(this, ViewModelFactoryOfFactory.INSTANCE)
.get(MyViewModel::class.java)
在哪里:
object ViewModelFactoryOfFactory {

// The default factory.
var INSTANCE: ViewModelProvider.Factory = MyViewModelFactory()
private set

// To set the factory during tests.
@VisibleForTesting
fun setTestFactory(factory: ViewModelProvider.Factory) {
ViewModelFactoryOfFactory.INSTANCE = factory
}
}
然后在测试设置中可以:
ViewModelFactoryOfFactory.setTestFactory(mockFactory)
有人可能会争辩说,所有这一切都可以被工厂取代以获得 ViewModel。
另一种选择可能只是制作 ViewModelProvider.Factory Activity 或 Fragment 中的字段/属性,因此它也可以从测试中设置,也允许更好的内存管理。

关于android - 使用模拟 ViewModel 测试 Android ViewModelProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67171056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com