gpt4 book ai didi

groovy - 在 Groovy 中使用来自 JUnit5 的 assertThrows

转载 作者:行者123 更新时间:2023-12-04 01:42:25 24 4
gpt4 key购买 nike

使用 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")
}
}

第二个示例使用流行的 Groovy 习惯用法 - 当方法的最后一个参数是闭包时,您可以将其放在括号外。它看起来像一个代码块,但它只是一个作为第二个参数传递给方法的闭包。

在 Java 示例中,您使用了作为 Executable 的实例传递的 lambda 表达式。功能界面。 Groovy 的等价物(至少在 Groovy 2.x 版本中 - 在 Groovy 3 中添加了对 lambda 表达式的支持)是对 SAM 类型的闭包强制(单个抽象方法)。上面的例子展示了如何定义 Executable 的实例。带闭包的类型。如果你把 ()在闭包右括号之后,您可以创建一个到 call() 的快捷方式。方法执行。此方法执行闭包的主体。

关于groovy - 在 Groovy 中使用来自 JUnit5 的 assertThrows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56876513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com