如何使用Mockito Java使用applicationType Json模拟http POST

如何使用Mockito Java使用applicationType Json模拟http POST,java,servlets,mocking,mockito,Java,Servlets,Mocking,Mockito,我想用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(

我想用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
type内容

类似这样,但是响应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);
        }
    });

Post请求正文可以通过
request.getInputStream()
或通过
request.getReader()
方法访问。为了提供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框架中的DelegatingServletInputStream类,也可以复制它。

请求正文可以通过
request.getInputStream()
request.getReader()
方法访问。为了提供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类,也可以复制它。

请提供一个示例/解决方案来回答我的具体问题:)得到编译错误:-->when(request.getInputStream())。然后返回(new ByteArrayInputStream(json.getBytes(StandardCharsets.utf8))--输入流到ByteArrayInputStream谢谢,它可以工作:)。如果你能看到另一个问题,也许你会很容易理解:)你说“请求”是什么意思?你如何在单元测试中创建那个对象?@JACA请看原始问题:
request=mock(HttpServletRequest.class)
。请为我的具体问题提供一个示例/解决方案:)得到编译错误:-->(request.getInputStream())。然后返回(新的ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));--inputstream到ByteArrayInputStream谢谢,它可以工作:)。如果你能看到另一个问题,也许你会很容易理解:)你说“请求”是什么意思?你如何在单元测试中创建那个对象?@JACA请看原始问题:
request=mock(HttpServletRequest.class)