【发布时间】:2020-12-23 07:54:30
【问题描述】:
我正在开发一个 android 应用程序,我选择使用 Kotlin Result 类来处理我的操作的成功/失败。我对代码进行了更改,但测试停止工作,我不明白为什么。这里我给你看一些sn-ps:
FireStoreClient.kt
suspend fun items(): Result<ItemsResponse>
NetworkDataSource.kt
suspend fun getItems(): List<Item> =
fireStoreClient.items().fold({ it.items.map { item -> item.toDomain() } }, { emptyList() })
NetworkDataSourceTest.kt
@ExperimentalCoroutinesApi
@Test
fun `Check getItems works properly`() = runBlockingTest {
whenever(fireStoreClient.items()).doReturn(success(MOCK_ITEMS_DOCUMENT))
val expectedResult = listOf(
Item(
id = 1,
desc = "Description 1"
),
Item(
id = 2,
desc = "Description 2"
)
)
assertEquals(expectedResult, dataSource.getItems())
}
这是我现在遇到的例外。有什么线索吗?单元测试时似乎没有执行 fold() 方法。
java.lang.ClassCastException: kotlin.Result cannot be cast to ItemsResponse
at NetworkDataSource.getItems(NetworkDataSource.kt:31)
【问题讨论】:
-
问题不是你的单元测试,是
NetworkDataSource.kt中的代码。我对 Android 的 Kotlin 不熟悉,但没有fold函数可以接收 2 个函数 - kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/… -
你能说明你的常量
MOCK_ITEMS_DOCUMENT是什么吗?
标签: android unit-testing kotlin