我已经通过参考pact repo中给出的示例示例编写了MessageProvider的样本Pact测试。以下是正在生成用于提供者期望的消息的PACT json文件的消费者测试。MessageQueue的契约:MessageQueues情况下的样本提供程序测试
在API的情况下,为了验证PACT,我可以使用“pact-jvm-provider-maven”插件来完成此操作。在这种情况下,PACT将根据提供商的实际托管API服务进行验证。
我的问题是,如何在MessageQueue的情况下,PACT将被验证?模拟队列会被创建吗?或者我需要将消息发布到实际的队列中,并且需要根据发布到Queue的此消息验证PACT消息。
有人可以解释它的工作原理吗?
另请指点示例代码(示例测试)写在提供者端以验证MessageQueue的消息。
示例消息(消费者)测试:
公共类Inbound_Receiving_OpenMessageTest { 专用字节[] 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;
}
}
感谢罗纳德的指针。如果有更多问题,我会通过帖子回来。 – Sunil
谢谢罗纳德。我仔细阅读了这篇文章,并试图对提供者端消息验证进行抽样测试。我正在上课ConfirmationKafkaMessageBuilder没有解决错误。下面使用的依赖, \t \t \t au.com.dius \t \t \t 协议,JVM的提供商junit_2.11 \t \t \t 3.5.4 。和 \t \t \t au.com.dius \t \t \t 协议,JVM的提供商maven_2.11 \t \t \t 3.5.4 \t \t \t 测试 \t \t –
Sunil
我能够弄清楚这一点。确认KafkaMessageBuilder是用户定义的函数。谢谢 – Sunil