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
。
我有一个像这样的 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
。