jeudi 4 juillet 2019

Observable not called when testing view model

I'm trying to test my viewmodel. In the model I have val uiEvent = SingleLiveData>() which is my observable inherited from MutableLiveData. When I change the value it does not seems to call the observable. SingleLiveData is working fine and I have used it before.

@RunWith(RobolectricTestRunner::class)
class QrViewModel2Test {
lateinit var viewModel:QrViewModel2
var qrScannerCalled = false
var onNextCalled = false
@Mock
lateinit var lifecycleOwner: LifecycleOwner

@Before
fun setUp() {
    val app = RuntimeEnvironment.application
    viewModel = QrViewModel2(app)

    viewModel.uiEvent.observe(lifecycleOwner, Observer {
        when (it.second) {
           viewModel.2 ->onNextCalled = true
           viewModel.1 ->  qrScannerCalled = true
        }
    })
}

@Test
fun openQrScanner() {
    Assert.assertTrue(!qrScannerCalled)
    viewModel.openQrScanner()
    Assert.assertTrue(qrScannerCalled)
}


@Test
fun onNext() {
    Assert.assertTrue(!onNextCalled)
    viewModel.onNext()
    Assert.assertTrue(onNextCalled)
}

}

from ViewModel this is how I call my observable.

fun openQrScanner(){
    uiEvent.value = this to 1
}
fun onNext(){
    uiEvent.value = this to 2
}

when eg onNext called it should chanhge onNextCalled to true but it's not.

Aucun commentaire:

Enregistrer un commentaire