gpt4 book ai didi

java - 使用外部 Https 主机进行 Spring Boot 测试的 WireMock

转载 作者:行者123 更新时间:2023-12-01 16:28:24 25 4
gpt4 key购买 nike

在我的应用程序中,我有外部第三方 API 请求。我想通过模拟此 API 请求来测试我的应用程序。

我的服务等级:

String API_URL = "https://external.com/v1/%s";
public Result executeRequest(String apiVersion, String subUrl, HttpMethod httpMethod)
{
try
{
HttpRequestBase httpRequest;
String url = String.format(API_URL, subUrl);
if (httpMethod.equals(HttpMethod.GET))
{
httpRequest = new HttpGet(url);
}
else if (httpMethod.equals(HttpMethod.POST))
{
httpRequest = new HttpPost(url);
((HttpPost) httpRequest).setEntity(new StringEntity(requestBody, "UTF-8"));
}
...
headers.forEach(httpRequest::setHeader);
HttpResponse response = httpClient.execute(httpRequest);
}
catch (IOException e)
{
logger.error("IO Error: {}", e.getMessage());
return handleExceptions(e);
}
}

总结一下服务类,请求可以是get、post、delete、put。该请求将通过 header 或正文部分进行处理。然后将作为http请求处理。

我的测试类:

@SpringBootTest
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
public class ServiceTest
{

private static final String API_URL = "https://external.com/v1";

@Autowired
private Service service;

@Autowired
protected Gson gson;

@Rule
public WireMockRule wireMockRule = new WireMockRule();

@Test
public void getResult_successfully()
{
Result result = new Result();
wireMockRule.stubFor(get(urlPathMatching("/subUrl"))
.willReturn(aResponse()
.proxiedFrom(API_URL)
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody(gson.toJson(result))));

Result returnResult = service.executeRequest("/subUrl", GET);

assertThat(returnResult).isEqualTo(result);
}
}

当我像上面那样实现它时,模拟不起作用。有什么建议吗?

注意:我希望代码片段足以理解整体代码。

最佳答案

我解决了这个问题;

  1. 描述测试 api-url 和端口。因为 Wiremock 创建了嵌入式本地主机服务器。

所以在应用程序属性中:

application-test.properties: 
- service.url: http://localhost:8484
application-prod.properties:
- service.url: https://external.com/v1

然后是我的测试类:

@ClassRule
public static WireMockRule wireMockRule = new WireMockRule(8484);

@Test
public void getResult_successfully()
{
Result result = new Result();
wireMockRule.stubFor(get(urlPathMatching("/subUrl"))
.willReturn(aResponse()
.proxiedFrom(API_URL)
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody(gson.toJson(result))));

Result returnResult = service.executeRequest("/subUrl", GET);

assertThat(returnResult).isEqualTo(result);
}

关于java - 使用外部 Https 主机进行 Spring Boot 测试的 WireMock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62113775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com