我已經通過參考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