小编Jos*_*llo的帖子

单元测试中 Kotlin Result<T> 的问题

我正在开发一个 Android 应用程序,我选择使用 Kotlin Result 类来处理我的操作的成功/失败。我对代码进行了更改,但测试停止工作,我不明白为什么。下面我给大家展示一些片段:

FireStoreClient.kt

suspend fun items(): Result<ItemsResponse>
Run Code Online (Sandbox Code Playgroud)

网络数据源.kt

suspend fun getItems(): List<Item> =
    fireStoreClient.items().fold({ it.items.map { item -> item.toDomain() } }, { emptyList() })
Run Code Online (Sandbox Code Playgroud)

网络数据源测试.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())
}
Run Code Online (Sandbox Code Playgroud)

这是我现在遇到的例外。有什么线索吗?单元测试时似乎未执行 Fold() 方法。

java.lang.ClassCastException: kotlin.Result cannot be cast to ItemsResponse

    at NetworkDataSource.getItems(NetworkDataSource.kt:31)
Run Code Online (Sandbox Code Playgroud)

android unit-testing kotlin

7
推荐指数
2
解决办法
5927
查看次数

标签 统计

android ×1

kotlin ×1

unit-testing ×1