Пример теста поставщика сообщений пакта junit5

Мне удалось преобразовать тесты Pact Consumer Pact сообщений в junit5, но я не уверен, как использовать информацию в файле readme для провайдера junit5 для преобразования соответствующих проверочных тестов провайдера сообщений. Может ли кто-нибудь указать на пример или предложить схему того, как поставщик проверяет, должны ли поставщики очереди сообщений работать с контекстом PactVerificationcontext?

Я пытаюсь преобразовать что-то вроде:

import au.com.dius.pact.provider.PactVerifyProvider;
import au.com.dius.pact.provider.junit.Consumer;
import au.com.dius.pact.provider.junit.PactRunner;
import au.com.dius.pact.provider.junit.Provider;
import au.com.dius.pact.provider.junit.loader.PactFolder;
import au.com.dius.pact.provider.junit.target.AmqpTarget;
import au.com.dius.pact.provider.junit.target.Target;
import au.com.dius.pact.provider.junit.target.TestTarget;


@RunWith(PactRunner.class)
@Provider("provider")
@Consumer("consumer")
@PactFolder("target/pacts")
public class MessageProviderPact {

  @TestTarget
  public final Target target = new AmqpTarget();

  private KafkaTemplate<String, MsgObject> kafkaTemplate
      = (KafkaTemplate<String, MsgObject>)Mockito.mock(KafkaTemplate.class);

  private MessageProducer messageProducer = new MessageProducer(kafkaTemplate);

  @Test
  @PactVerifyProvider("case a")
  public String verifyCaseA() throws IOException {
    // given
    ListenableFuture<SendResult<String, MsgObject>> future =
        mock(ListenableFuture.class);
    doReturn(future).when(kafkaTemplate).send(any(String.class),
        any(MsgObject.class));

    // when
    DomainObj domainObj = new DomainObj();
    String topic = "kafka_add";
    messageProducer.send(topic, domainObj);

    // then
    ArgumentCaptor<MsgObject> messageCapture = ArgumentCaptor.forClass(
        MsgObject.class);
    verify(kafkaTemplate, times(1)).send(eq(topic),
        messageCapture.capture());

    // returning the message
    return objectMapper.writeValueAsString(messageCapture.getValue());
  }
}

person David Lewine    schedule 11.12.2019    source источник


Ответы (1)


Пример можно найти в пакете-jvm репозиторий проекта

Соответствующий код приведен ниже:

@Provider("AmqpProvider")
@PactFolder("src/test/resources/amqp_pacts")
public class AmqpContractTest {
  private static final Logger LOGGER = LoggerFactory.getLogger(AmqpContractTest.class);

  @TestTemplate
  @ExtendWith(PactVerificationInvocationContextProvider.class)
  void testTemplate(Pact pact, Interaction interaction, PactVerificationContext context) {
    LOGGER.info("testTemplate called: " + pact.getProvider().getName() + ", " + interaction);
    context.verifyInteraction();
  }

  @BeforeEach
  void before(PactVerificationContext context) {
    context.setTarget(new MessageTestTarget());
  }

  @State("SomeProviderState")
  public void someProviderState() {
    LOGGER.info("SomeProviderState callback");
  }

  @PactVerifyProvider("a test message")
  public String verifyMessageForOrder() {
    return "{\"testParam1\": \"value1\",\"testParam2\": \"value2\"}";
  }

}
person David Lewine    schedule 12.12.2019
comment
404, когда я нажимаю на эту ссылку - person findusl; 11.09.2020