Код: Выделить всё
fun getConsumptionData(
beginDate: Date,
endDate: Date,
id: String,
transformation: (List, String) -> List,
filterCriteria: (List) -> List,
finalMapping: ((T) -> R)? = null,
getOtherData: () -> Flowable
): Flowable {
return FIRST_REPOSITORY.getStatus()
.asFlowable()
.flatMap { status ->
if (status.isAvailable) {
getMainData(beginDate, endDate, id)
.map { entities ->
var transformedData =
transformation(entities, id)
transformedData = filterCriteria.invoke(transformedData)
(if (finalMapping != null) transformedData.map(finalMapping) else transformedData)
.filterNotNull()
}
} else {
getOtherData()
}
}
.onErrorReturn { emptyList() }
}
Код: Выделить всё
fun getMainData(
beginDate: Date,
endDate: Date,
tradeAgreementId: String
): Flowable {
return SECOND_REPOSITORY
.getAll(
beginDate, endDate
).asFlowable()
}
Когда я хочу протестировать getConsumptionData , у меня возникла проблема с getMainData, она не очень хорошо высмеивается.
Код: Выделить всё
class ConsumptionRepositoryTest {
private lateinit var repository: ConsumptionRepository
private lateinit var firstRepository: FakeFirstRepository
private lateinit var secondRepository: FakeSecondRepository
@get:Rule
val koinTestRule = KoinTestRule.create {
modules(
module {
factoryOf(::FakeFirstRepository)
factoryOf(::FakeSecondRepository)
})
}
@OptIn(ExperimentalCoroutinesApi::class)
@BeforeTest
fun setUp(): Unit = runTest {
Dispatchers.setMain(UnconfinedTestDispatcher())
repository =
ConsumptionRepository()
firstRepository = FakeFirstRepository()
secondRepository = FakeSecondRepository()
}
@OptIn(ExperimentalCoroutinesApi::class)
@AfterTest
fun tearDown() = runTest {
Dispatchers.resetMain()
}
@Test
fun `returns transformed and filtered data when status is available`() = runTest {
// GIVEN
val beginDate = Date(1609459200000)
val endDate = Date(1640995200000)
val id = "id"
val transformation: (List, String) -> List =
{ entities, _ ->
fakeTranformedEntities
}
val filterCriteria: (List) -> List =
{ entities ->
fakeTranformedEntities.subList(0, 1)
}
val getOtherData: () -> Flowable = {
Flowable.just(
emptyList()
)
}
val result = repository.getConsumptionData(
beginDate = beginDate,
endDate = endDate,
id = id,
transformation = transformation,
filterCriteria = filterCriteria,
getOtherData = getOtherData
).toList().blockingGet() as List
val expectedData = fakeTranformedEntities.subList(0, 1)
assertEquals(expectedData, result)
}
Раньше я пробовал использовать библиотеку Mockk вместо поддельных данных, и у меня была та же проблема, в то время как с firstRepository у меня нет проблем.
Помогите мне, пожалуйста!!!
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/791 ... in-android