Я провожу некоторое модульное тестирование с использованием gTest и gMock, пытаясь проверить, передана ли функция сообщение protobuf, которое содержит значение c в повторяющемся поле. В настоящее время я создаю точную копию ожидаемого сообщения, а затем использую google::protobuf::util::MessageDifferencer
, чтобы ожидать получения точного сообщения.
Проблема в том, что я не хочу сравнивать все сообщение; Я только хочу убедиться, что указанное значение c существует в повторяющемся поле. Там могут быть и другие значения, которые меня не волнуют.
Я думал о написании собственного сопоставителя, что-то вроде
MATCHER_P(FieldFinder, expected, "")
{
for (element : arg.repeated_field())
{
if (element == expected)
{
return true;
}
}
return false;
}
Но этот сопоставитель был бы привязан к этой спецификации c структура сообщения и не позволил бы мне использовать его повторно, если повторяющееся поле находится в другом месте. Есть ли лучший способ сделать это?