TGViewer
StepOne | Степан Минин StepOne | Степан Минин @steponeit · 3.26K subscribers
Post #844 1.94K
StepOne | Степан Минин Как я посадил WireMock.Net на gRPC стероиды WireMock.Net умеет мокать gRPC. Но для этого он заставляет разработчика таскать .proto файлы и поддерживать лишнюю конфигурацию. Я контрибьютил в проект несколько месяцев, разобрался в кишках и написал своё расширение…
А вот и первый баг!

Не успел WireMock.Grpc.Protobuf толком размяться, как у него появился первый баг. Всё по-взрослому.

Проблема нашлась в GrpcPredicateMatcher. Первый запрос он обрабатывал правильно, а при повторном вызове выдавал отсутствие совпадения. Особенно хорошо эффект проявлялся на protobuf-сообщениях с repeated-полями.

Причина оказалась в одной строчке:
private static readonly TMessage Empty = new();

private static readonly MessageParser<TMessage> Parser =
new(() => Empty);


MessageParser ожидает фабрику, которая при каждом разборе создаёт новый объект сообщения. А я возвращал ему один и тот же статический экземпляр.

В результате парсер не очищал объект и дописывал туда новые данные поверх старых. К примеру, если сообщение содержало поле с коллекцией, то она распухала при каждом вызове:
["1", "2", "3"] // первый вызов
["1", "2", "3", "1", "2", "3"] // второй вызов


Исправление заняло меньше символов, чем объяснение бага. Оно заключается в подстановке вызова конструктора new() вместо статического объека Empty.

Первый баг пойман, тест добавлен, стероидный курс продолжается. Поставить звезду на GitHub:
https://github.com/Stepami/wiremock-protobuf
GitHub GitHub - Stepami/wiremock-protobuf: Statically typed gRPC mocking for WireMock.Net using generated Google.Protobuf contracts Statically typed gRPC mocking for WireMock.Net using generated Google.Protobuf contracts - Stepami/wiremock-protobuf
  • 👍 10
  • 🔥 5
  • 🤯 3
  • ❤‍🔥 1
More from @steponeit
  1. Sep 21, 2026Post #857
  2. Sep 15, 2026Напомню, что у меня есть WireMock.Grpc.Protobuf — расширение для тех, кто пишет компонентн…
  3. Sep 12, 2026StepOne — официальный контрибутор FusionCache 🤙 Между набросами можно ещё и код писать Fu…
  4. Sep 11, 2026Стояк работодателей 2026 🤫 Оказывается, год назад я предсказал выход Астры! И вместе с эт…
  5. Sep 10, 2026Доставка - новое IT Мужчина на видео делится опытом заработка 350 000 ₽ за месяц без выход…
  6. Sep 4, 2026GPT-6 УЖЕ ЗДЕСЬ!!! Мне стала доступна Астра!!! Теперь я ИИ-Пилот на стыке эпох! AI-First S…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →