我想检查某些代码是否会引发确定的异常。
特别是,对于我的情况,我想写得像:
{shaderCodeOf(gl, this::class.java, data + "$FRAGMENT_FAIL.frag")} shallThrow GLException::java.class
我试着写
infix fun (() -> Unit).shallThrow(java: Class<*>)
但我没有取得多大成功..
任何想法,伙计们?
答案 0 :(得分:4)
在lambdas上声明扩展函数没有问题。
infix fun (()->Unit).shallThrow(java: Class<out Throwable>) {
// do whatever you need ^ you mean this, didn't you?
}
然后:
{} shallThrow RuntimeException::class.java
答案 1 :(得分:3)
不是你的问题的直接答案(lambdas上的接收方法),但你可以使用另一种实现方式:
inline fun <reified T: Throwable> assertThrows(fn: (() -> Unit)) {
try {
fn()
} catch (e: Throwable) {
if (e is T) {
return
} else {
fail("Expected ${T::class} but caught ${e::class}")
}
}
fail("Expected ${T::class} but caught nothing.")
}
您可以将其用作assertThrows<MyException> { doStuff(); }