使用Groovy的Junit5的断言



使用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()方法执行的快捷方式进行快捷方式。此方法执行关闭的身体。

相关内容

  • 没有找到相关文章

最新更新