当前位置: 首页 > 知识库问答 >
问题:

MessageQueue的协议:MessageQueue情况下的示例提供程序测试

慕容修伟
2023-03-14

通过参考Pact Repo中给出的示例,我为MessageProvider编写了示例Pact测试。下面是使用者测试,它正在为预期来自提供者的消息生成PACT json文件。

公共类Inbound_Receiving_OpenMessageTest{private byte[]receivingopenloaddetailsmessage;

@Rule
public MessagePactProviderRule mockProvider = new MessagePactProviderRule(this);

@Pact(provider = Configuration.ReceivingProviderOpen, consumer = Configuration.InboundConsumer)
public MessagePact createPact(MessagePactBuilder builder) {
    PactDslJsonBody body = (PactDslJsonBody) new PactDslJsonBody()
            .stringType("_id")
            .object("delivery")
                .stringType("deliveryNumber")
            .closeObject()
            .array("state")
                    .object()
                        .stringType("changeTime")
                        .stringValue("status", "OPEN")
                        .stringType("changeUser")
                    .closeObject()
            .closeArray();

    Map<String, String> metadata = new HashMap<String, String>();
    metadata.put("contentType", "application/json");

    return builder
            .given("Receiving(Open) App State")
            .expectsToReceive("Receiving Open Load details Test")
            .withMetadata(metadata)
            .withContent(body)
            .toPact();
}

@Test
@PactVerification({Configuration.ReceivingProviderOpen, "Receiving(Open) App State"})
public void test() throws Exception {
    Assert.assertNotNull(new String(receivingOpenLoadDetailsMessage));

    LoadDetails openLoadDetails = null;
    Gson gson = new GsonBuilder().create();
    String entity = new String(receivingOpenLoadDetailsMessage);
    openLoadDetails = gson.fromJson(entity, LoadDetails.class);

    if(openLoadDetails.getDelivery().getDeliveryNumber() == null || 
            openLoadDetails.getState().get(0).getChangeUser() == null ||
            openLoadDetails.getState().get(0).getChangeTime() == null ||
            openLoadDetails.getState().get(0).getStatus() == null){
        Assert.fail("Either one of the field 'deliveryNumber' or 'changeTime' or 'status' or 'changeUser' is NULL");
    }
}

public void setMessage(byte[] messageContents) {
    receivingOpenLoadDetailsMessage = messageContents;
}

}

共有1个答案

嵇光临
2023-03-14

这篇博文对此进行了更详细的解释。

从本质上讲,这个想法是,如果您能够验证将消息放入队列的代码符合约定(提供者),并且处理来自队列的消息的代码也符合约定(使用者),那么您实际上就不需要消息队列来验证约定。

 类似资料:
  • 本文向大家介绍Android7.0 MessageQueue详解,包括了Android7.0 MessageQueue详解的使用技巧和注意事项,需要的朋友参考一下 Android中的消息处理机制大量依赖于Handler。每个Handler都有对应的Looper,用于不断地从对应的MessageQueue中取出消息处理。 一直以来,觉得MessageQueue应该是Java层的抽象,然而事实上Mes

  • 我正在尝试使用pact来验证spring boot微服务。我已经从consumer生成了pact文件,并在provider端使用pact Broker验证了它。 我有另一个用例,在根据实际的服务响应验证pact文件之前,我需要执行一些代码。我读过关于状态改变URL和状态改变与闭包来实现它,但没有得到一个如何实现这一点的例子。有人能帮忙吗? 如果这个客户不存在,那么我将需要通过读取pact文件中的更

  • 我正在尝试配置TomEE(带有Java EE的Tomcat)以使用AMQP Wire协议连接到外部代理(Azure Service Bus)。缺省情况下,JMS提供程序似乎是ActiveMQ。根据文档,ActiveMQ确实支持AMQP协议。我的目标是使用ActiveMQ作为TomEE提供的JMS提供程序。但是,部署基本ear文件时,会出现以下错误: 有人将ActiveMQ与AMQP一起使用吗?或者

  • 我知道协议缓冲区是一种序列化格式,需要中的消息格式。proto,以便正确读回。但我有一个文件,我不知道正确的消息格式,因为它没有发布。我想做的是自己对数据进行反向工程,这样我就可以重建消息。为此,我需要读取原始文件,从中可以提取字段编号、类型和值。 有没有一个程序可以做到这一点(最好是在python中,但C/C也很酷)?

  • 我想为我的客户和API建立契约测试。我的API不能在本地运行,所以我希望能够在部署到生产之前,针对已部署的API临时版本运行提供程序测试。 我在网上看到的提供程序测试的大多数示例都使用了localhost。当尝试对我部署的HTTPSendpoint运行提供程序测试时,测试失败,显示。是不支持HTTPS协议,还是我遗漏了什么? 使用pact-provider-verifier cmd line工具工

  • 我刚刚开始对我的系统采用Pact测试,它由一个提供者服务和一个作为消费者的棱角前端组成。我成功地设置了双方,因此,Angular应用程序生成了一个(单个)pact文件,与我的提供者服务的多个endpoint进行了许多交互。在提供程序中,我现在确实面临这样一个问题,即我的验证测试变得非常庞大和过于复杂,因为我必须在一个测试中用所有endpoint的数据模拟所有endpoint,例如: 有没有一种方法