Используйте совпадения GMock C ++, чтобы проверить, являются ли ключи unordered_map из набора ключей - PullRequest
0 голосов
/ 28 июня 2019

Допустим, у меня есть следующее:

unordered_map<string, int> map{{"foo", 1}, {"bar", 2}, {"baz", 3}};
vector<string> expected_keys{"foo", "bar", "kaz"}; // Note "kaz" not "baz"

И я хочу проверить, все ли ключи из map содержатся в наборе expected_keys.

Что яочень хочу написать вот что:

EXPECT_THAT(map, Each(Key(From(expected_keys))));

Однако, насколько я могу судить, ничто не поддерживает шаблон From;то есть, проверка того, что значение из набора значений.Библиотека matcher, кажется, предполагает, что вы всегда будете делать set contains value, а не value is in set.В любом случае, кроме этого, они эквивалентны.И, если бы unordered_map имел keys() API, вы могли бы вписать его в шаблон, используя простой UnorderedElementsAreArray(expected_keys).Но это не так.

Самое близкое, что я мог придумать, было:

EXPECT_THAT(map, Each(Key(ResultOf([&](const key&){return Value(expected_keys, Contains(key));}, IsTrue())))

Что ... просто ужасно.Pointwise() действительно близко, но упорядоченность поиска делает его неправильным для неупорядоченного контейнера.

Есть ли способ выполнить этот тип запроса напрямую, не прибегая к ResultOf() и Value()?Или я думаю о проблеме не так?

...