- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很高兴使用新的 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/
我看到两个名称相似的类,ViewModelProviders 和 ViewModelProvider。任何人都可以解释这些类(class)之间的区别是什么?哪个类实际提供了 ViewModel? 最佳
我正在尝试创建可感知生命周期的 View 模型。但是我在我的 Android 项目中找不到 ViewModelProviders 类,只有 ViewModelProvider。似乎也没有 androi
我目前正在将我的项目架构从 MVP 转换为 MVVM。当我在研究它时,我发现有些事情让我感到困惑: 在项目iosched的ScheduleViewModelFactory.kt中,工厂实现ViewMo
由于所说的贬值,我不再使用 ViewModelProviders.of(this)。我研究了其他问题并使用了答复中的代码。所有代码都没有错误,但当我尝试运行该应用程序时,出现异常。 此处发生错误。 P
我有一个在我的“MainActivity.java”上启动的模型,其名称如下: //MainActivity.java (public class MainActivity extends AppCo
我正在研究 Android ViewModel 架构组件,但在尝试在 AppCompatActivity 中初始化 ViewModel 时出现上述错误。 import android.arch.lif
“ViewModelProviders”已从 androidx.lifecycle:lifecycle-*:2.2.0-alpha03 中弃用 https://developer.android.co
我想重新使用 ViewModel 和 LiveData 从 Firebase 读取节点。这是我在 Fragment 中的代码 FirebaseDatabaseViewModel tes
我正在尝试使用 View 模型,但是遇到了一个奇怪的错误,编译器说它无法识别“of”。我已经在我的 build.gradle 中导入了依赖项并像这样同步 def ver = "1.1.1" impl
我使用 ViewModelProviders。但是今天,更新库后,有30条消息。据我所知,ViewModelProviders 不再可用,您需要替换它,我查看了 developer.google,但不
我正在尝试遍历 google tutorial on building good ap architecture .我正在使用 Java 8 和 SDK 26。这是我到目前为止的代码: package
我试图通过将我的一些 ViewModel 实例移动到一个抽象基类中来减少 Dagger 的一些样板,但找不到一个很好的方法来做到这一点。我的 Intent 是从我的基本 fragment 中实例化我的
ActivityViewModels 和惰性 ViewModelProvider 的区别? 我见过两种初始化 View 模型的方法: private val someViewModel: SomeVi
为什么我应该为 View 模型使用 viewmodelproviders? 为什么我不能将自定义单例注释添加到我的 View 模型中,然后将此 View 模型注入(inject) fragment 类
这就是我正在努力做的事情。 在 Fragment 内设置对象的 ArrayList 从 FragmentActivity 中的观察者获取该数组容器(承载所有 fragment 的 Activity)
我相信我正在遵循为我提供的用于建立 ViewModelProvider.Factory 的代码示例。它发生在 OnAttach 方法的 CheckInRecentList 代码中的这条语句上。我们将不
关于过去的问题How to get a ViewModel? ,以及我发现的例子,它并不能解决我的问题。我没有在那里发表评论的权限,所以我不得不再次询问。我没有 ViewModelProviders
我是 Kotlin 的新手,请帮助我如何在 Kotlin 中使用 ViewModelProviders.of(this) 我的java代码是 mFavViewModel = ViewModelPro
嘿,我正在尝试让我的 ViewModel 工作,但到目前为止还没有运气。Android Studio 显示错误 Cannot resolve symbol 'ViewModelProviders'。
我很高兴使用新的 Android 架构组件 ViewModel 系统,它很好地将 Activity/Fragment/Layout 渲染问题与 ViewModel 逻辑分开。我已经成功地对 ViewM
我是一名优秀的程序员,十分优秀!