MediatorLiveData не работает в тестах JUnit? - PullRequest
0 голосов
/ 24 декабря 2018

Итак, я попытался использовать MediatorLiveData для довольно простого варианта использования для преобразования кода страны ISO (например, «США») в код вызова страны (например, «+1») с помощью libphonenumber.Получившийся экран работает нормально, но, похоже, не проходит тесты JUnit, даже когда используется InstantTaskExecutorRule.

Пример минимального модульного теста (в Kotlin), который, по моему мнению, должен пройти, но не проходит:

import android.arch.core.executor.testing.InstantTaskExecutorRule
import android.arch.lifecycle.MediatorLiveData
import android.arch.lifecycle.MutableLiveData
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test

class MediatorLiveData_metaTest {
    @get:Rule
    val instantTaskExecutorRule = InstantTaskExecutorRule()

    @Test
    fun mediatorLiveData_metaTest() {
        val sourceInt = MutableLiveData<Int>()
        val mediatedStr = MediatorLiveData<String>()

        mediatedStr.addSource(sourceInt) {
            mediatedStr.value = it.toString()
        }

        sourceInt.value = 123

        assertEquals("123", mediatedStr.value) // says mediatedStr.value is null
    }
}

1 Ответ

0 голосов
/ 24 декабря 2018

Спасибо пользователю Reddit matejdro ;ответ заключался в том, что, как и в общеизвестной шредингеровской кошке, MediatorLiveData не будет обновляться сама по себе, если ее не наблюдать, поэтому мне потребуется mediatedStr.observeForever{}, чтобы заставить ее обновляться.

...