LiveData 的 Transformations.map 未在且仅在单元测试中被触发

LiveData's Transformations.map not being triggered in, and only in, Unit Tests

我有一个像这样的 ViewModel:

class MyViewModel {
    val title = MutableLiveData<String>()
    val onTitleError: LiveData<Int?> = Transformations.map(title, this::validateTitle)
}

问题是在单元测试期间执行时 Transformations.map 永远不会由 title 值更改触发。例如:

val viewModel = MyViewModel()
viewModel.title.value = "123"

Assert.assertEquals(viewModel.onTitleError.value, R.string.myError)

我正在使用此规则进行 LiveData 测试:

@Rule
var liveDataRule: TestRule = InstantTaskExecutorRule()

在 Instrumented Tests 或正常 运行 期间执行时,一切正常。

只是举例说明@ianhanniballake 的回答,我刚刚添加了 viewModel.onTitleError.observeForever { },然后上面的代码片段应该如下所示:

val viewModel = MyViewModel()

viewModel.onTitleError.observeForever { }
viewModel.title.value = "123"

Assert.assertEquals(viewModel.onTitleError.value, R.string.myError)

您需要 observe 您的 onTitleError LiveData 才能填充其 value