小编syl*_*bix的帖子

如何使用junit和mockito测试从switchMap派生的Android Live Data?

我正在编写一个单元测试,以断言LiveData使用期望的参数调用观察者。LiveData通过使用InstantTaskExecutorRule,模拟观察者并通过observeForever方法观察数据,我进行了成功的测试。

当使用与LiveDataTransformations.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)

android unit-testing mockito kotlin android-livedata

7
推荐指数
0
解决办法
1178
查看次数