3

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

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

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

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

类型推断失败的编译器错误

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

4

2 回答 2

7

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

assertFailsWith<MyRuntimeException> { myMethodThatThrowsThatException() }
于 2018-02-15T17:01:42.823 回答
4

assertThrows方法需要 aClass作为它的第一个参数,但你试图给它一个KClass. 要解决此问题,只需执行以下操作(如此处文档中所述

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

您也可以省略显式Executable类型:

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

或者,如果您的方法确实不带任何参数,则可以使用方法引用:

assertThrows(MyRuntimeException::class.java, ::myMethodThatThrowsThatException)
于 2018-02-15T16:59:06.027 回答