У меня есть .proto файл с несколькими
сообщения, которые выглядят примерно так,
Message messageA{
required double value =1;
//more fields
}
Message messageB{
required int32 value =1;
//more fields
}
Я хотел бы проверить, что каждое добавленное в файл сообщение будет иметь поле «значение».
Если этого не произойдет, правильным результатом будет неудачный юнит-тест.
Есть ли лучший способ сделать это без
надеетесь, что следующий программист добавит экземпляры сообщений в тест?
Благодарю.
Вы можете достичь этого с помощью отражения буфера протокола. FileDescriptor Класс позволяет перебирать все сообщения в файле (для этого используйте функцию «message_type (int index)»). Затем вы можете использовать «FindFieldByName ()» в сообщении дескриптор определить, есть ли поле с именем «значение».
Что касается совершенно не связанных сторон, я бы настоятельно рекомендовал вам использовать «необязательный» вместо «обязательный» в сообщениях буфера протокола. Требования к приложению лучше всего предъявляются самим приложением, а не логикой десериализации; использование «необязательного» позволяет более аккуратно завершать код приложения, если это условие не выполняется, тогда как «обязательное» вызывает сбой, и, к сожалению, изменение поля в сообщении с «обязательного» на «необязательное» позднее может быть очень опасным (поскольку старый приложения могут все еще считать это необходимым, в то время как последующие приложения могут больше не заполнять его).