【问题标题】:How do I test expected Unchecked Exceptions in Kotlin?如何在 Kotlin 中测试预期的未检查异常?
【发布时间】:2018-07-26 12:13:04
【问题描述】:

我正在尝试在 Kotlin 中编写一个测试,以确保在特定情况下引发未经检查的异常。

我正在尝试像这样使用org.junit.jupiter.api.Assertions.assertThrows

assertThrows(MyRuntimeException::class, Executable { myMethodThatThrowsThatException() })

当我尝试这个时,我得到一个

类型推断失败编译器错误

因为我的Exception 不是CheckedException,而是RuntimeException。有没有什么好方法可以在不进行天真的 try catch 的情况下测试这种行为?

【问题讨论】:

    标签: exception testing junit kotlin unchecked-exception


    【解决方案1】:

    assertThrows 方法需要 Class 作为它的第一个参数,但您试图给它一个 KClass。要解决此问题,只需执行以下操作(如文档 here 中所述):

    assertThrows(MyRuntimeException::class.java, Executable { myMethodThatThrowsThatException() })
    

    您也可以省略明确的Executable 类型:

    assertThrows(MyRuntimeException::class.java, { myMethodThatThrowsThatException() })
    

    或者如果你的方法真的不带任何参数,你可以使用方法引用:

    assertThrows(MyRuntimeException::class.java, ::myMethodThatThrowsThatException)
    

    【讨论】:

      【解决方案2】:

      您可以使用 Kotlin 标准库中的 assertFailsWith

      assertFailsWith<MyRuntimeException> { myMethodThatThrowsThatException() }
      

      【讨论】:

        猜你喜欢
        • 2015-07-31
        • 2021-07-29
        • 2019-01-23
        • 2012-04-05
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 2015-08-09
        • 2011-07-31
        相关资源
        最近更新 更多