【问题标题】:how to throw an HttpException in Kotlin - retrofit 2 - unit test如何在 Kotlin 中抛出 HttpException - 改造 2 - 单元测试
【发布时间】:2021-05-05 04:24:18
【问题描述】:

我正在编写一个单元测试,我想抛出一个错误代码为 409 的 HttpException。

这是我尝试过的,但它给了我一个错误

Using 'parse(String): MediaType?' is an error. moved to extension function

这是一个kotlin文件和Retrofit 2.6.0,ResponseBody是okhttp3 - 3.12.12

我尝试过的

 every(call.execute()).thenThrow(HttpException(
            Response.error<Any>(409, ResponseBody.create(
                MediaType.parse("plain/text"), ""
            ))
        ))

请问我该如何解决

谢谢 回复

【问题讨论】:

    标签: android kotlin retrofit retrofit2 okhttp


    【解决方案1】:

    对于 Kotlin: 目前 ResponseBody.create 方法已被弃用(至少在 OkHttp3 版本中。4.9.1)。可以使用以下扩展方法:

    "raw response body as string".toResponseBody("plain/text".toMediaTypeOrNull())
    

    【讨论】:

      【解决方案2】:

      我以前遇到过这种情况。在某些时候,OkHttp3 的某些依赖项发生了变化,由此产生的错误消息并不是很有帮助。我相信您正在寻找的是新的.toMediaType() Kotlin 扩展功能。所以而不是:

      ResponseBody.create(MediaType.parse("plain/text"), "")
      

      请尝试:

      ResponseBody.create("plain/text".toMediaType(), "")
      

      您可能需要导入此扩展程序。如果您的 IDE 没有自动建议,请尝试通过 import okhttp3.MediaType.Companion.toMediaType 导入。

      【讨论】:

      • 您好,感谢您的回复,我试过这个,当我尝试导入时,它给我一个导入错误 - Unresolved reference: Companion
      • 当我查看 MediaType 文件时,它是在 Java 中
      • 如果您输入"plain/text".to,IDE 是否会建议任何类型的引用媒体类型的扩展函数?扩展定义可能会在 OkHttp3 的迭代之间跳跃。
      • 试过了,但IDE不建议任何与媒体类型相关的功能
      • 有趣。如果您仅在运行单元测试时遇到此问题,则testImplementation 可能在与典型调试版本不同的 OkHttpClient 迭代下运行。我正在使用您为 OkHttp 和 Retrofit 列出的两个版本,您应该继续使用MediaType.parse()。如果您可以发布您的应用程序级 gradle 文件的 dependencies {},我也许可以推断出这个问题。如果您这样做,请编辑您的原始问题并将其添加到那里。
      【解决方案3】:

      我只是扔这个:

       throw HttpException(Response.error<ResponseBody>(500 ,ResponseBody.create(MediaType.parse("plain/text"),"some content")))
      

      【讨论】:

        猜你喜欢
        • 2020-05-23
        • 1970-01-01
        • 2019-02-19
        • 2014-02-28
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        • 2018-11-09
        相关资源
        最近更新 更多