gpt4 book ai didi

android - Kotlin Result 在单元测试中的问题

转载 作者:行者123 更新时间:2023-12-04 14:39:30 31 4
gpt4 key购买 nike

我正在开发一个 android 应用程序,我选择使用 Kotlin Result 类来处理我的操作的成功/失败。我对代码进行了更改,但测试停止工作,我不明白为什么。在这里,我向您展示一些 fragment :
FireStoreClient.kt

suspend fun items(): Result<ItemsResponse>
网络数据源.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())
}
这是我现在得到的异常(exception)。有什么线索吗?单元测试时似乎没有执行 fold() 方法。
java.lang.ClassCastException: kotlin.Result cannot be cast to ItemsResponse

at NetworkDataSource.getItems(NetworkDataSource.kt:31)

最佳答案

对于那些不想自己制作 Result 的人,我为这个结果包装问题找到了不同的解决方法。类型。
这个问题似乎在使用 Mockito 的 .thenReturn 时特别发生。在 suspend功能。我发现使用 .thenAnswer没有表现出问题。
所以不要在你的单元测试中写这个(在此处将 doReturn 更改为 thenReturn):

whenever(fireStoreClient.items()).thenReturn(success(MOCK_ITEMS_DOCUMENT))
利用:
whenever(fireStoreClient.items()).thenAnswer { success(MOCK_ITEMS_DOCUMENT) }
编辑:我应该注意到在运行 Kotlin 1.5.0 时我仍然遇到这个问题。
编辑:在 Kotlin 1.5.20 我可以使用 .thenReturn再次。

关于android - Kotlin Result<T> 在单元测试中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65420765/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com