UnitTesting asyn c код rxjava / rx kotlin завершается с ошибкой latch = 1 - PullRequest
1 голос
/ 16 января 2020

Итак, у меня есть следующий тест, который продолжает проваливаться со следующей ошибкой:

java .lang.AssertionError: Нет значений (защелка = 1, значения = 0, ошибки = 0, завершения = 0)

val ocrProcessor = mockk<FirebaseFormProcessor>()
        val date = listOf(DateTextExtraction())

        every { ocrProcessor.scan(any(), any(), any()) } answers {
            thirdArg<OcrResultCallback>().invoke(date)
        }

        viewModel = FormViewModel(ocrProcessor)

        viewModel.addImage(bitmap)

        viewModel.ocrAlert
            .test()
            .assertValue {
                it == date
            }
            .addTo(disposeBag)

То, что это пытается проверить, таково:

override val ocrAlert: PublishSubject<List<TextExtractionInterface>> = PublishSubject.create()

override fun addImage(bitmap: Bitmap) {
    if (files.value.isEmpty())
        ocrProcessor.scan(bitmap, extract = textExtractionItems) { ocrResult ->
            ocrAlert.onNext(ocrResult)
        }
}

Я не совсем уверен, что я делаю здесь неправильно, но я думаю, что это может иметь чтобы решить проблемы с потоками.

edit:

Теперь я изменил код на:

        val toBeTested = viewModel.ocrAlert
            .subscribeOn(scheduler)
            .observeOn(scheduler)
            .test()

        viewModel.addImage(bitmap)

         toBeTested   
            .assertValue {
                it == date
            }
            .addTo(disposeBag)
...