我想知道使用googletest框架测试两个std::map
是否相等的“正确/最佳”方法是什么?
问题在于std::map
的值中有一些指针,我想测试它们指向的东西在两个std::map
中是否正确。
例如,我的地图具有以下签名:
std::map<int, std::vector<std::pair<MyClass1*, MyClass2*>>>
因此,我想确保在我正在测试的两个映射中,MyClass1
和MyClass2
指针的值相同。
答案 0 :(得分:1)
如果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));
}