使用java和assertthrows:
public static <T extends Throwable> T assertThrows(Class<T> expectedType, Executable executable)
我们可以编写简单的lambda函数:
@Test
void testExpectedException() {
Assertions.assertThrows(NumberFormatException.class, () -> {
Integer.parseInt("One");
});
}
我们如何在Groovy中做到这一点?
我正在尝试:
@Test
void testExpectedException() {
assertThrows(NumberFormatException.class, {
Integer.parseInt("One");
}())
}
但错误被扔了而没有抓:
java.lang.format.NumberFormatException: For ....
您的测试方法中有一个错误。您没有将闭合到Executable
类型,而是通过了呼叫闭合的结果。正确的语法是:
@Test
void testExpectedException() {
assertThrows(NumberFormatException.class, {
Integer.parseInt("One");
})
}
您甚至可以使用:
将其制成"凹槽"@Test
void testExpectedException() {
assertThrows(NumberFormatException) {
Integer.parseInt("One")
}
}
这个第二个示例使用流行的凹槽成语 - 当方法的最后一个参数是封闭式时,您可以将其放在括号之外。它看起来像是一个代码块,但它只是该方法的第二个参数。
。在Java示例中,您使用了传递的lambda表达式作为Executable
功能接口的实例。Groovy的等效物(至少在Groovy 2.X版本中 - 在Groovy 3中添加了对Lambda表达式的支持(是闭合胁迫到SAM类型(单个抽象方法(。上面的示例显示了如何使用闭合定义Executable
类型的实例。如果您在关闭闭合支架后放置()
,则可以将call()
方法执行的快捷方式进行快捷方式。此方法执行关闭的身体。