Возможно, вы захотите использовать verify () в сочетании с ArgumentCaptor, чтобы обеспечить выполнение в тесте и ArgumentCaptor для оценки аргументов:
ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
verify(mock).myFunction(argument.capture());
assertEquals("the expected value here", argument.getValue());
Значение аргумента очевидно доступно через аргумент. getValue () для дальнейшей манипуляции / проверки /whatever.
Использование std::less<Bar*>
достаточно (но использование operator<
не достаточно). Специализации указателей из std::less
(как указывает принятый ответ на «Использование std :: less with nullptr» ) гарантируют полное упорядочение . Сравнение с nullptr
является неопределенным , что означает, что стандарт не налагает конкретное упорядочение, но std::less
должен все же произвести полное упорядочение (и для данный указатель p
, p < nullptr
обязательно выдает одно и то же значение каждый раз).
Так как полное упорядочение сильнее, чем слабое, в вашем случае достаточно использовать std::less
.
РЕДАКТИРОВАТЬ: Если нет, то как правильно (например, как объединить std :: less с std :: tie)?
blockquote>К сожалению, не существует изящного способа. Поскольку
std::tie
возвращаетstd::tuple
, и сравнение кортежей определяется в терминахoperator<
по их значениям (а неstd::less
), вы не можете использовать здесьstd::tie
. Чтобы использоватьstd::less
, вам нужно будет сделать это вручную:bool operator<(const Foo& rhs) const { if (std::less<>{}(x, rhs.x)) return true; if (std::less<>{}(rhs.x, x)) return false; return std::less<>{}(y, rhs.y); }
Кроме того, ваша текущая реализация (переосмысление указателей как целых чисел) также производит полное упорядочение (очевидно, поскольку вы сравниваете целые числа), но вместо неопределенного поведения у вас будет определяемое реализацией поведение (из
reinterpret_cast
).