Я пытаюсь проверить свой 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)
и получателя с помощью myPublicLiveData
. Я имею в виду, когда я открываю и геттер, и сеттер моего поля private
, почему бы мне просто не сделать его общедоступным?
Вот мой текущий подход к тестированию моих 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())
}
Я надеюсь, что есть способ лучше, чем писать собственный сеттер для всех изменяемых данных (у меня их более 20, и это просто уродливый шаблонный код). Может я что-то здесь неправильно понял.
Имейте в виду, что я новичок в разработке Android и в концепции MVVM и особенно Livedata.
Я ценю любую помощь, спасибо!