因此,我尝试将MediatorLiveData用于转换ISO国家代码的相当简单的用例(例如"US")通过使用libphonenumber发送到国家呼叫码(例如"+1")。生成的屏幕运行良好,但即使使用了InstantTaskExecutorRule,JUnit测试似乎也会失败。
示例最小单元测试(在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
}
}发布于 2018-12-24 17:05:24
多亏了Reddit用户matejdro;答案是,就像Schrödinger的猫一样,MediatorLiveData不会自我更新,除非被观察到,所以我需要一个mediatedStr.observeForever{}来迫使它自我更新。
https://stackoverflow.com/questions/53910409
复制相似问题