Проблемы с имитацией сопрограмм ProducerScope

У меня есть функция, которая создает channelFlow, а затем передает область в качестве аргумента другому классу.

journeyRepository.canGetPagedJourneys(this)

У меня проблемы с издевательством над "этим" (ProducerScope)

Функция, которую мне нужно протестировать

override suspend fun subscribeToPagedJourneys(journeyCount: Int,
                                              scoreType: Int,
                                              startDate: String,
                                              subscribe: Boolean): Flow<Output<List<JourneyEntity>>> {
    return coroutineHelper.channelFlow {
        if (subscribe) {
            journeyRepository.subscribe(this)
        }

        if (journeyRepository.canGetPagedJourneys(this)) {
            journeyRepository.getPagedJourneys(this, journeyCount, scoreType, startDate)
        }
    }
}

Обертка для channelFlow

class CoroutineHelperImpl @Inject constructor(): CoroutineHelper{

    override fun <T> channelFlow(block: suspend ProducerScope<T>.() -> Unit): Flow<T> {
        return kotlinx.coroutines.flow.channelFlow(block)
    }
}

Тестовый класс - не компилируется из-за путешествия Repository.canGetPagedJourneys(returnScope), где область возврата - это поток, а не область производителя. Вот где у меня возникают проблемы с разработкой того, что предоставить тесты, чтобы удовлетворитьwhen состояние.

@ExperimentalCoroutinesApi
class JourneyRepositoryHelperImplTest {

private lateinit var helper: JourneyRepositoryHelperImpl
@Mock lateinit var journeyRepository: JourneyRepository
@Mock lateinit var coroutineHelper: CoroutineHelperImpl

@Before
fun setUp() {
    MockitoAnnotations.initMocks(this)
    helper = JourneyRepositoryHelperImpl(journeyRepository, coroutineHelper)
}

@Mock lateinit var block: suspend ProducerScope<Output<List<JourneyEntity>>>.() -> Unit

@Test
fun subscribeToPagedJourneys() {
    runBlocking {
        val journeyCount = 0
        val scoreType = 0
        val startDate = ""
        val subscribe = false
        val returnScope = coroutineHelper.channelFlow(block)
        `when`(coroutineHelper.channelFlow(block)).thenReturn(returnScope)
        `when`(journeyRepository.canGetPagedJourneys(returnScope)).thenReturn(
                false)

        val actual = helper.subscribeToPagedJourneys(journeyCount, scoreType, startDate,
                subscribe)


        }
    }
}

0 ответов