Chr*_*ris 4 groovy junit assert junit5
当使用Java和assertThrows时:
public static <T extends Throwable> T assertThrows(Class<T> expectedType, Executable executable)
Run Code Online (Sandbox Code Playgroud)
我们可以编写简单的 lambda 函数:
@Test
void testExpectedException() {
Assertions.assertThrows(NumberFormatException.class, () -> {
Integer.parseInt("One");
});
}
Run Code Online (Sandbox Code Playgroud)
我们如何在 Groovy 中做到这一点?
我正在尝试类似的事情:
@Test
void testExpectedException() {
assertThrows(NumberFormatException.class, {
Integer.parseInt("One");
}())
}
Run Code Online (Sandbox Code Playgroud)
但错误被抛出并且没有被捕获:
java.lang.format.NumberFormatException: For ....
Run Code Online (Sandbox Code Playgroud)
你的测试方法有一个错误。您没有强制将闭包强制为Executable类型,而是传递了调用闭包的结果。正确的语法是:
@Test
void testExpectedException() {
assertThrows(NumberFormatException.class, {
Integer.parseInt("One");
})
}
Run Code Online (Sandbox Code Playgroud)
你可以用以下方法让它变得更“groovier”:
@Test
void testExpectedException() {
assertThrows(NumberFormatException) {
Integer.parseInt("One")
}
}
Run Code Online (Sandbox Code Playgroud)
第二个示例使用流行的 Groovy 习惯用法 - 当方法的最后一个参数是闭包时,您可以将其放在括号之外。它看起来像一个代码块,但它只是作为第二个参数传递给方法的闭包。
Executable在 Java 示例中,您使用了作为函数接口实例传递的 lambda 表达式。Groovy 的等效项(至少在 Groovy 2.x 版本中 - Groovy 3 中添加了对 lambda 表达式的支持)是对 SAM 类型(单一抽象方法)的闭包强制转换。上面的示例展示了如何使用Executable闭包定义类型的实例。如果将()闭包放在右大括号后面,则会创建call()方法执行的快捷方式。该方法执行闭包的主体。
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |