gpt4 book ai didi

android - 如何确保在 Android 单元测试中调用 ViewModel#onCleared?

转载 作者:搜寻专家 更新时间:2023-11-01 08:19:00 27 4
gpt4 key购买 nike

这是我的 MWE 测试类,它依赖于 AndroidX、JUnit 4 和 MockK 1.9:

class ViewModelOnClearedTest {
@Test
fun `MyViewModel#onCleared calls Object#function`() = mockkObject(Object) {
MyViewModel::class.members
.single { it.name == "onCleared" }
.apply { isAccessible = true }
.call(MyViewModel())

verify { Object.function() }
}
}

class MyViewModel : ViewModel() {
override fun onCleared() = Object.function()
}

object Object {
fun function() {}
}

注意:该方法在父类(super class) ViewModel 中受到保护。

我想验证 MyViewModel#onCleared 是否调用了 Object#function。上面的代码通过反射完成了这个。我的问题是:我能否以某种方式运行或模拟 Android 系统,以便调用 onCleared 方法,这样我就不需要反射了?

来自 onCleared JavaDoc:

This method will be called when this ViewModel is no longer used and will be destroyed.

所以,换句话说,我如何创建这种情况,以便我知道调用了 onCleared 并且我可以验证它的行为?

最佳答案

在 kotlin 中,您可以使用 public 覆盖 protected 可见性,然后从测试中调用它。

class MyViewModel: ViewModel() {
public override fun onCleared() {
///...
}
}

关于android - 如何确保在 Android 单元测试中调用 ViewModel#onCleared?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54115627/

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