我们有一个异步应用程序,这意味着我们向API发送请求,API立即接受请求并返回200。然后服务器处理请求并使用上述处理的结果回调API。例如:
1.拨打POST /order
上的Server A
Server A
在Server B
上调用POST /processor/order
,从而创建订单。Server B
处理订单Server B
回调Server A
上的URLPOST /order/callback/{1}
Server A
处理响应
我尝试使用Spring Boot Tests
和WireMock Webhooks
编写一个集成测试,如下所示:
@Test
void shouldReturnCallbackAndProcessOrder() {
// test setup ...
wm.stubFor(post(urlPathEqualTo("/processor/order"))
.willReturn(ok())
.withPostServeAction("webhook", webhook()
.withMethod(POST)
.withUrl("http://my-target-host/order/callback/1")
.withHeader("Content-Type", "application/json")
.withBody("{ \"result\": \"SUCCESS\" }"))
);
...some assertions here...
Thread.sleep(1000);
}
我需要把Thread.sleep(1000);
这一行放在测试的最后,以等待webhook调用Server A
。有没有更好的方法来做到这一点?
1条答案
按热度按时间hkmswyz61#
我建议使用Awaitility,它允许你将检查操作 Package 在lambda中,并且它将被重复检查,直到它通过或者达到超时。
WireMock将此用于自己的异步测试:https://github.com/wiremock/wiremock/blob/25b82f9f97f3cc09136097b249cfd37aef924c36/src/test/java/com/github/tomakehurst/wiremock/PostServeActionExtensionTest.java#L85