Spring Boot Wiremock Webhook回调Sping Boot 集成测试

lnlaulya  于 2023-01-25  发布在  Spring
关注(0)|答案(1)|浏览(470)

我们有一个异步应用程序,这意味着我们向API发送请求,API立即接受请求并返回200。然后服务器处理请求并使用上述处理的结果回调API。例如:
1.拨打POST /order上的Server A

  1. Server AServer B上调用POST /processor/order,从而创建订单。
  2. Server B处理订单
  3. Server B回调Server A上的URL POST /order/callback/{1}
  4. Server A处理响应
    我尝试使用Spring Boot TestsWireMock 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。有没有更好的方法来做到这一点?

hkmswyz6

hkmswyz61#

我建议使用Awaitility,它允许你将检查操作 Package 在lambda中,并且它将被重复检查,直到它通过或者达到超时。

await().atMost(5, SECONDS).until(/* fetch some value */, is("expected value"));

WireMock将此用于自己的异步测试:https://github.com/wiremock/wiremock/blob/25b82f9f97f3cc09136097b249cfd37aef924c36/src/test/java/com/github/tomakehurst/wiremock/PostServeActionExtensionTest.java#L85

相关问题