У меня есть связь между двумя компонентами/микросервисами, где компонент A отправляет события по HTTP компоненту B. В традиционном паттерне HTTP-потребителя/поставщика HTTP A является потребителем B, поскольку A отправляет запрос и B отвечает. Однако в этом случае B является реальным потребителем событий, которые предоставляет A.pact HTTP message consumer
Есть ли способ реализовать тесты потребителя/поставщика, чтобы потребительский тест мог быть записан на принимающей стороне (B), а не на стороне отправки?
Я видел, что были введены сообщения pacts, которые звучат так, как будто они могут быть использованы в этом сценарии, но я не видел каких-либо легко понятных примеров того, как это реализовано, и если оно может использоваться в сочетании с HTTP как в моем сценарии.
Я использую pact-jvm-junit.
Первоначально у меня был этот подход. Моя проблема заключается в том, что, по моему мнению, она нарушает принцип договоров с потребителем. Компонент A разработан другой командой и продолжает работу. Будучи потребителем событий A, я хотел бы создать контракт с потребителем в B, чтобы сообщить A, что я ожидаю, чтобы данные событий содержались, чтобы команда, развивающая A, могла убедиться, что они соответствуют ожиданиям моего (B). A на самом деле не потребляет ничего от B, кроме ответа 204. Таким образом, внедряя его в этом направлении, мы потеряли бы ориентированный на тест/потребительский аспект и его преимущества. –
В идеале я хотел бы использовать Http расширенный вариант MessagePact. В качестве эксперимента я попытался реализовать свои тесты с использованием MessagePact вместо этого, и это возможно, хотя я могу только проверить часть сообщения (тело) и потерять специфичные для HTTP части пакта и их проверки. –
Да, у вас там сложный сценарий. Я не уверен, что Пакт может вам помочь. Эта первая услуга, о которой я упомянул, что был использован Пакт, та же команда разработала как потребителя, так и поставщика, поэтому не было той же проблемы. –