AssertThrows в JUNIT5 - PullRequest
       6

AssertThrows в JUNIT5

1 голос
/ 09 февраля 2020

Я пытаюсь выучить assertThrows в junit5, в качестве второго аргумента Executable используется метод void execute(). Но при прохождении примера по тому же примеру, приведенному ниже, мы передаем ему значение LAMBDA, которое возвращает значение типа double с методом double divide(int a , int b). Теперь, как можно пропустить указанную ниже лямбду, если она не имеет той же сигнатуры, что и метод execute в Excecutable. Это должно дать compile error верно?

assertThrows(ArithmeticException.class,() -> m.divide(1, 0),"Failed");

1 Ответ

7 голосов
/ 09 февраля 2020
() -> m.divide(1, 0)

эффективно обрабатывается как

new Executable() {
  @Override public void execute() {
    m.divide(1, 0);
  }
}

Лямбда может рассматриваться как экземпляр любого интерфейса / класса с помощью одного абстрактного метода.

Лямбда всегда является поли-выражением, что означает что их точный тип определяется контекстом, в котором они используются.

Нет проблем с совместимостью.

...