我正在编写一个单元测试,以断言LiveData使用期望的参数调用观察者。LiveData通过使用InstantTaskExecutorRule,模拟观察者并通过observeForever方法观察数据,我进行了成功的测试。
当使用与LiveData从Transformations.switchMap断言派生的方法相同时,将失败。
例如:
class LoginViewModel {
@Inject lateinit var service: LoginService
val passwordField = ObservableField<String>()
private val loginInput = SingleLiveEvent<String>()
val loginEvent: LiveData<UserNotification> =
Transformations.switchMap(loginInput, { password ->
service.login(password)
})
fun login() {
loginInput.value = passwordField.get()
}
}
Run Code Online (Sandbox Code Playgroud)
*摘自Google Samples Repo的 SingleLiveEvent
然后进行相应的测试(使用mockito_kotlin):
class LoginViewModelTest {
@Rule
@JvmField
val rule = InstantTaskExecutorRule()
//...Setup mock login service, assign it to the view model to be tested, etc
@Test …Run Code Online (Sandbox Code Playgroud)