【发布时间】:2021-01-03 05:19:35
【问题描述】:
我正在尝试通过编写一些单元测试来测试我的viewmodel。我的问题是,如果不为 MutableLiveData 手动设置一些值(在生产中它们是通过数据绑定设置的),我就无法实现我的目标。这里的问题是我的 MutableLiveData (显然)是private,因此我无法通过在单元测试中写入mutablelivedata.value = "Some Value" 来设置值。
我读过一些文章,有人说我应该通过编写自定义设置器来公开我的 MutableLiveData:
private val _myMutableLiveData = MutableLiveData<String>()
val myPublicLiveData: LiveData<String> get() = _myMutableLiveData
// setter
fun setStringForLiveData(value: String) {
_myMutableLiveData.value = value
}
我的问题来了:将 MutableLiveData 设置为 private 但使用自定义 setStringForLiveData(value: String) 公开 setter 和使用 myPublicLiveData 公开 getter 有什么意义。我的意思是,当我同时公开 private 字段的 getter 和 setter 时,为什么我不应该将其公开?
这是我目前测试 MutableLiveData 的方法(我不知道这是否有意义甚至是否有效)
@Test
fun `first shipping text should be set correctly`() {
(viewModel.secondDropDownVisibility as MutableLiveData<Boolean>).value = false
(viewModel.shippingFirstDdText as MutableLiveData<String>).value = "Toast"
assertEquals("Toast", viewModel.decideShippingTextOne())
}
我希望有比为每个 mutablelivedata 编写自定义设置器更好的方法(我有 20 多个,这只是丑陋的样板代码)。也许我在这里误解了一些东西。
请记住,我对 Android 开发和 MVVM 概念,尤其是 Livedata 还比较陌生。
感谢每一个帮助,谢谢!
【问题讨论】:
标签: android kotlin mvvm android-livedata android-mvvm