junit 如何对LiveDataMediator进行单元测试?

6jygbczu  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(172)

我有一个中介LiveData

private val _userIsReady = MediatorLiveData<Boolean>()
val userIsReady: LiveData<Boolean> = _userIsReady.apply {
    val dataUpdate = {
        val userData = userDataResult.value?.userData
        val passwordData = passwordResult.value

        if (userData != null && passwordData != null) {
            _userIsReady.postValue(true)
        }
    }

    addSource(userDataResult) { dataUpdate() }
    addSource(passwordResult) { dataUpdate() }
}

因此,这里的问题是如何在单元测试中创建dataUpdate触发器,并使userDataResult.value?.userDatapasswordResult.value不为空。如果在测试中,我将能够进入if条件?

rryofs0p

rryofs0p1#

您需要一个附加到测试中的LiveData的Observer来观察每一个更改,没有它就观察不到任何更改。
下面是一个使用MockK库的简化例子:

// Mock class with MockK
val userIsReadyObserver = mockk<Observer<Boolean>>

// Add observer in setUp
userIsReady.observeForever(userIsReadyObserver)

// Remove observer in tearDown
userIsReady.removeObserver(userIsReadyObserver)

@Test
fun userIsReadyTest() {
   // do your stuffs to modify _userIsReady

   // MockK method to verify what happened
   verify {
       userIsReadyObserver.onChanged(true/false)
   }
}

相关问题