如何在单元测试中实例化 ViewModel?

问题描述 投票:0回答:2

以下代码实验室在不使用 Robolectric 或任何模拟库的情况下在单元测试中实例化一个

ViewModel

https://developer.android.com/codelabs/basic-android-kotlin-compose-test-viewmodel

这怎么可能?我以为

ViewModel
是 Android 库的一部分,不会在 JVM 中运行。

android kotlin unit-testing testing viewmodel
2个回答
0
投票

ViewModel
只是一个类,它确实是Android SDK的一部分。但是,如果有可用的公共构造函数,您实际上不需要任何特定的 Android 机制来创建它的实例。

这个构造函数实际上是用来在测试类中实例化一个ViewModel。它在 JVM 上运行的原因是 JVM 能够编译和运行 Kotlin 代码。

Plain JVM 确实无法管理和正确创建 Android 应用程序组件(如

Activity
),因此它们通常在测试中被模拟。然而
ViewModel
在代码实验室中不需要任何 Android 特定组件的实例进行测试。


0
投票

这怎么可能?

ViewModel 和其他类一样是一个 Java 类。因此它的一个实例可以像任何其他实例一样实例化。

我认为作为 Android 库的一部分的 ViewModel 不会在 JVM 中运行。

ViewModel
实际上不是“Android 库的一部分”——它是
JetPack
生命周期组件库 的一部分。这些是对 - 但not - 核心 Android 框架的扩展。您可以从 ViewModel 源代码 中看到,基
ViewModel
类不依赖于核心 Android 框架类 - 只有其他
JetPack
类和标准
Java
类。

因此,您不需要存在 Android 运行时即可使用

ViewModel
这意味着您可以在本地单元测试 JVM 上运行它。

© www.soinside.com 2019 - 2024. All rights reserved.