Проблемы с имитацией сопрограмм 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)
}
}
}