如何在Kotlin中测试预期的未经检查的异常?

时间:2018-02-15 16:46:47

标签: exception testing junit kotlin unchecked-exception

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

我试图像这样使用org.junit.jupiter.api.Assertions.assertThrows

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

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

  

类型推断失败编译器错误

因为我的Exception不是CheckedException而是RuntimeException。有没有什么好的方法来测试这种行为而不做天真的尝试捕捉?

2 个答案:

答案 0 :(得分:4)

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

assertFailsWith<MyRuntimeException> { myMethodThatThrowsThatException() }

答案 1 :(得分:2)

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

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

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

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

或者,如果您的方法确实没有采用任何参数,您可以使用方法引用:

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