Вы можете определить совпадение, если operator==
не является опцией:
using mymap = std::map<int, std::vector<std::pair<MyClass1 *, MyClass2 *>>>;
MATCHER_P(MAP_MATCHER, expected_map, "Maps are not equal") {
if (expected_map.size() != arg.size()) {
return false;
}
return std::all_of(expected_map.cbegin(), expected_map.cend(), [&](const std::pair<int, std::vector<std::pair<MyClass1 *, MyClass2 *>>> &item) {
auto arg_item = arg.find(item.first);
if (arg.cend() == arg_item) {
return false;
}
//more checks here
});
}
, а затем использовать его:
TEST(maptest, test1) {
mymap m1{{1, {{new MyClass1{}, new MyClass2{}}}}};
mymap m2{{1, {{new MyClass1{}, new MyClass2{}}}}};
ASSERT_THAT(m1, MAP_MATCHER(m2));
}