然后我想对该 HEAD 请-6ren">
gpt4 book ai didi

android - Retrofit HEAD 必须使用 Void 作为 Kotlin 中的响应类型

转载 作者:行者123 更新时间:2023-12-05 00:00:07 25 4
gpt4 key购买 nike

我定义了以下 API 方法:

@HEAD("test/{name})
fun checkTitle(@Path("name") name: String): Single<Response<Void>>

然后我想对该 HEAD 请求的成功响应进行单元测试,但不知道如何在 Kotlin 中实例化 Void 对象。

whenever(mockService.checkTitle(any()))
.thenReturn(Single.just(Response.success(*VOID NEEDS TO BE HERE*)))

repo.checkTitle("tester")
.test()
.assertError(ValueTaken::class.java)

如果我将 api 调用响应更改为返回 Unit,它会在运行时崩溃并出现以下错误,因为 Retrofit 尚不支持 Unit。

HEAD method must use Void as response type.

编辑 - 目前已尝试添加类

到目前为止,我已经尝试了以下方法,但编译器提示说它期望返回类型为 Single<Response<Void>>!

  • 单位
  • 没有
  • 任何

最佳答案

您可以通过(滥用)反射创建 Void 的实例:

val voidConstructor = Void::class.java.getDeclaredConstructors()[0]
voidConstructor.setAccessible(true)
val voidInstance = voidConstructor.newInstance()

这是做什么的:

  • Void 获取第一个声明的构造函数,它是私有(private)的
  • 将其设置为公开
  • 从该构造函数创建一个实例

虽然我不建议在生产代码中这样做,但在测试中这更容易接受。

关于android - Retrofit HEAD 必须使用 Void 作为 Kotlin 中的响应类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52766009/

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