我正在尝试在Kotlin中编写一个测试,以确保在特定情况下抛出未经检查的异常。
我试图像这样使用org.junit.jupiter.api.Assertions.assertThrows
:
assertThrows(MyRuntimeException::class, Executable { myMethodThatThrowsThatException() })
当我尝试这个时,我得到了一个
类型推断失败编译器错误
因为我的Exception
不是CheckedException
而是RuntimeException
。有没有什么好的方法来测试这种行为而不做天真的尝试捕捉?
答案 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)