gpt4 book ai didi

android - 模拟返回 Kotlin Coroutines Deferred 类型的方法的返回值

转载 作者:IT老高 更新时间:2023-10-28 13:41:29 26 4
gpt4 key购买 nike

我正在使用 Kotlin 协程,特别是使用 Retrofit 的 CoroutineCallAdapterFactory。然后我正在尝试对一个类进行单元测试,该类又利用 Retrofit 接口(interface)(GalwayBusService 下面)。

interface GalwayBusService {

@GET("/routes/{route_id}.json")
fun getStops(@Path("route_id") routeId: String) : Deferred<GetStopsResponse>

}

在我的单元测试中我有

val galwayBusService = mock()

然后尝试类似以下的方法来模拟调用该方法时返回的内容。问题在于 getStops 返回一个 Deferred 值。有没有什么特别的方法可以用来模拟这样的 API?

`when`(galwayBusService.getBusStops()).thenReturn(busStopsResponse)

最佳答案

正确的解决方案是使用 CompletableDeferred .它比编写 async 更好,因为它不会同时启动任何东西(否则您的测试时间可能会变得不稳定),并且可以让您更好地控制以什么顺序发生的事情。

例如,如果要无条件返回已完成的deferred,可以写成whenever(galwayBusService.getBusStops()).thenReturn(CompletableDeferred(busStopsResponse)) 或者

val deferred = CompletableDeferred<GetStopsResponse>()
whenever(galwayBusService.getBusStops()).thenReturn(deferred)
// Here you can complete deferred whenever you want

如果你想稍后完成它

关于android - 模拟返回 Kotlin Coroutines Deferred 类型的方法的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52692740/

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