В вашем методе тестирования есть одна ошибка. Вместо приведения замыкания к типу Executable
вы передали результат вызова замыкания. Правильный синтаксис:
@Test
void testExpectedException() {
assertThrows(NumberFormatException.class, {
Integer.parseInt("One");
})
}
Вы можете сделать его еще более "отличным" с помощью:
@Test
void testExpectedException() {
assertThrows(NumberFormatException) {
Integer.parseInt("One")
}
}
Во втором примере используется популярная идиома Groovy - когда последний параметр метода является замыканием, вы можете поместить его за скобки. Он выглядит как блок кода, но это просто замыкание, переданное методу в качестве второго параметра.
В примере с Java вы использовали лямбда-выражение, переданное в качестве экземпляра Executable
функционального интерфейса. Для этого Groovy-эквивалент (по крайней мере, в версии Groovy 2.x - добавлена поддержка лямбда-выражений в Groovy 3) - приведение замыкания к типу SAM (единственный абстрактный метод). В приведенном выше примере показано, как определить экземпляр типа Executable
с замыканием. Если вы поставите ()
после закрывающей скобки закрытия, вы сделаете ярлык для выполнения метода call()
. Этот метод выполняет тело замыкания.