2016-02-12 4 views
0

У меня есть I/FLambda ожидания в JMockit

public interface NumberIF { public Integer getNumber(); }

и когда я пытаюсь вызвать следующую FUNC;

public void func(NumberIF data)

Я использую следующий способ с лямбда

func(() -> 5)

Проблема заключается в том, что я не могу соответствовать описанной выше функции с JMockit ожидания ...

new Expectations() { { someclass.func(() -> 5); }

Для Callable<T> объектов, .equals метод всегда сравнивает некоторый номер идентификатора, а не литеральные объекты, хранящиеся в них. Есть ли обходной путь для этой проблемы?

ответ

1

JMockit соответствует аргументам в блоках ожидания/проверки с использованием метода equals (который по умолчанию сравнивает идентификаторы объектов).

В вашем примере объект, созданный выражением лямбда (() -> 5), не реализует метод equals, поэтому сравниваются идентификаторы объектов.

Нижняя строка: если вы действительно хотите сравнить объекты Callable<T>, вам необходимо либо реализовать equals в конкретных реализациях, либо вам нужно убедиться, что вы используете один и тот же экземпляр в своем блоке ожиданий, как в вашем вызове «производственный код» ,

Смежные вопросы