У меня есть тест Google, который делает вызов
EXPECT_THAT(unit.OnEndStartup(), ::testing::ElementsAre(
IsEvent(Result::NoError,Type::S , ""),
IsEvent(Result::NoError,Type::N , ""),
IsEvent(Result::NoError,Type::E , ""),
IsEvent(Result::NoError,Type::C , "")
));
IsEvent
- это MATCHER_P2
, определенный ниже.
unit.OnEndStartup() returns vector<Info> where struct Info {
Result result;
PackageType type;
std::string newVersion;
inline bool operator==(Info e1)
{
return (e1.result == result
&& e1.package == package
&& e1.newVersion == newVersion);
}
}
Вызов EXPECT_THAT()
используется в несколькихместа по всему файлу.Я ищу разумный способ рефакторинга нескольких вызовов IsEvent ().
Я определил
std::array<Info, 4> expected_default_list = {
Info(Result::NoError, Type::S, ""),
Info(Result::NoError, Type::N, ""),
Info(Result::NoError, Type::E, ""),
Info(Result::NoError, Type::C, "")
};
EXPECT_THAT(unit.OnEndStartup(), ::testing::ElementsAreArray(expected_default_list));
Это приводит к ошибкам шаблона.мой подход в рефакторинге кода правильный?Я получаю ошибку
error: no match for ‘operator==’ (operand types are ‘const Info’ and ‘const Info’)
bool operator()(const A& a, const B& b) const { return a == b; }