gpt4 book ai didi

java - 如何使用 Mockito Java 模拟带有 applicationType Json 的 http POST

转载 作者:行者123 更新时间:2023-11-29 08:39:14 25 4
gpt4 key购买 nike

我想用 json 数据模拟 http POST。

对于 GET 方法,我使用以下代码成功:

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

when(request.getMethod()).thenReturn("GET");
when(request.getPathInfo()).thenReturn("/getUserApps");
when(request.getParameter("userGAID")).thenReturn("test");
when(request.getHeader("userId")).thenReturn("xxx@aaa-app.com");

我的问题是 http POST 请求正文。我希望它包含 application/json 类型的内容。

类似这样,但是响应 json 响应的请求参数应该是什么?

HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);

when(request.getMethod()).thenReturn("POST");
when(request.getPathInfo()).thenReturn("/insertPaymentRequest");
when( ???? ).then( ???? maybe ?? // new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
new Gson().toJson("{id:213213213 , amount:222}", PaymentRequest.class);
}
});

或者“public Object answer...”不是用于 Json 返回的正确方法。

usersServlet.service(request, response);

最佳答案

通过 request.getInputStream() 或通过 request.getReader() 方法访问 Post 请求正文。这些是您需要模拟以提供 JSON 内容的内容。确保同时模拟 getContentType()

String json = "{\"id\":213213213, \"amount\":222}";
when(request.getInputStream()).thenReturn(
new DelegatingServletInputStream(
new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8))));
when(request.getReader()).thenReturn(
new BufferedReader(new StringReader(json)));
when(request.getContentType()).thenReturn("application/json");
when(request.getCharacterEncoding()).thenReturn("UTF-8");

您可以使用 Spring Framework 中的 DelegatingServletInputStream 类或只复制其 source code .

关于java - 如何使用 Mockito Java 模拟带有 applicationType Json 的 http POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41542703/

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