Как протестировать LiveData.asFlow().collect() и надежно проверить вызов метода внутри него?Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Как протестировать LiveData.asFlow().collect() и надежно проверить вызов метода внутри него?

Сообщение Гость »


Я пытаюсь протестировать класс, который принимает объект LiveData, преобразует его в поток, собирает его и на основе результата выполняет действие.

В основном коде все работает так, как и ожидалось, но я не могу понять, как это проверить. Похоже, что проверка того, что блок кода внутри collect происходит, никогда не достигается, и тест ложно проходит.

Это моя настройка:

class LiveDataClass { весело liveData(): LiveData { вернуть MutableLiveData (истина) } весело сделать что-нибудь() {} fun decoyMethod() {} // чтобы проверить, вызывается ли он в тесте, просто чтобы он провалился } Класс, собирающий поток:

class FlowClass(private val liveDataClass: LiveDataClass) { приостановить веселье doSomethingWhenLiveDataIsTrue() { liveDataClass.liveData().asFlow().collect { если оно) { println("Внутри коллекции") liveDataClass.doSomething() // здесь, в тесте, мы достигаем кода } } } } И тест — я просмотрел несколько примеров настройки, чтобы избежать ошибок, и хотя этот тест проходит, и я вижу liveDataClass.doSomething() вызывается, проверка никогда не происходит.

Я проверяю, вызывается ли когда-либо liveDataClass.decoyMethod() (что на самом деле не так), и тест все еще в порядке...

class FlowClassTest { @get:Правило val InstantTaskExecutorRule: TestRule = InstantTaskExecutorRule() частный диспетчер val = StandardTestDispatcher() частный val testScope = TestScope (диспетчер) @До забавная установка() { Dispatchers.setMain(диспетчер) } @После весело слеза вниз() { Диспетчеры.resetMain() } @Тест веселый тест() = runTest { testScope.launch { println("Запуск тестового примера") val liveDataClass: LiveDataClass = макет { каждый { liveData() } возвращает MutableLiveData(true) каждый { doSomething() } отвечает { println("ТЕСТ - Делаем что-то") } } valflowClass = FlowClass(liveDataClass) flowClass.doSomethingWhenLiveDataIsTrue() verify { // никогда не происходит, и тест проходит, хотя и не должен! println("Проверка") liveDataClass.decoyMethod() } } } } Как настроить этот тест, чтобы он был действительно полезен и правильно проверял вызовы?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»