【发布时间】:2021-11-06 01:01:41
【问题描述】:
我正在为一个资源(带有 resteasy 的 Jax-rs)编写一个集成测试,它调用第三方对 Trustpilot Api 的请求以获取产品的评论链接。 在我的测试中,我想使用 Wiremock 模拟这个调用,并使用 resteasy Dispatcher 调用请求。 下面的代码显示了我的设置(名称等已更改)。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { MyResourceTestContext.class })
public class MyResourceIntegrationTest {
@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort().dynamicHttpsPort());
@Autowired
private MyResource myResource;
private Dispatcher dispatcher;
private MockHttpResponse response;
@Before
public void setUp() throws Exception {
dispatcher = MockDispatcherFactory.createDispatcher();
dispatcher.getRegistry().addSingletonResource(myResource);
response = new MockHttpResponse();
}
@Test
public void testResourceShouldReturnRedirectToTrustpilotreview() throws Exception {
URI apiRequestURI = UriBuilder
.fromUri("https://api.trustpilot.com/v1/private/product-reviews/business-units"
+ "/{businessUnitId}}/invitation-links")
.build(BUSINESS_UNIT_ID);
URI expectedRedirectURI = UriBuilder.fromUri("https://products.trustpilot.com/#evaluate/{reviewLinkId}")
.build(REVIEW_LINK_ID);
stubFor(post(apiRequestURI.toString())
.willReturn(okJson("{\"reviewLinkId\":\"" + REVIEW_LINK_ID + "\","
+ "\"reviewUrl\":\"" + expectedRedirectURI.toString() + "\"}")));
MockHttpRequest request = MockHttpRequest.get("/myResource");
dispatcher.invoke(request, response);
WireMock.verify(1, postRequestedFor(urlEqualTo(apiRequestURI.toString())));
Assert.assertEquals(HttpStatus.TEMPORARY_REDIRECT.value(), response.getStatus());
Assert.assertEquals(expectedRedirectURI.toString(), response.getOutputHeaders().getFirst("Location"));
}
但我得到的是(我在网址中的实际出价):
com.github.tomakehurst.wiremock.client.VerificationException: Expected at least one request matching: {
"url" : "https://api.trustpilot.com/v1/private/product-reviews/business-units/<bid>/invitation-links",
"method" : "POST"
}
Requests received: [ ]
使用调试器进入请求我可以说这个请求和其他请求实际上执行成功了。但它们不会被 Wiremock 识别/模拟。
我的 Wiremock 设置有问题吗?有任何想法吗?谢谢!
【问题讨论】:
标签: spring integration-testing resteasy wiremock