Нет способа (в текущей реализации Java) сравнить две лямбды и / или ссылки на методы.Для получения более подробной информации прочитайте этот пост .
Что вы можете сделать (в случае, если getUnit()
не может быть смоделировано), это проверить, делают ли две ссылки на метод одно и то же при вызове.Но вы не можете проверить какие-либо неизвестные побочные эффекты.
public void verifyUpdateTheSameField(Integer value, BiConsumer<Unit, Integer> updater1, BiConsumer<Unit, Integer> updater2) {
Unit unit1 = // initialize a unit
Unit unit2 = // initialize to be equal to unit1
actual.accept(unit1, value);
expected.accept(unit2, value);
assertThat(unit1).isEqualTo(unit2);
}
И затем:
ArgumentCaptor<Integer> valueCaptor = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<BiConsumer<Unit, Integer>> updaterCaptor = ArgumentCaptor.forClass(BiConsumer.class);
verify(handler.service, times(1)).update(valueCaptor.capture(), updaterCaptor.capture());
verifyUpdateTheSameFields(valueCaptor.getValue(), updaterCaptor.getValue(), Unit::updateX);
Примечание: этот подход будет работать, только если Unit
переопределяет equals
.