gpt4 book ai didi

java - 使用 Jmockit 进行 Servlet JUnit 测试

转载 作者:行者123 更新时间:2023-11-30 08:02:27 25 4
gpt4 key购买 nike

我想使用 JUnit 和 JMockit 为 Servlet 构建单元测试。

我有一个 ImageServlet,它将图像 ID(字符串)作为请求参数,如果 ID 为空,servlet 会抛出 HTTP 状态代码 404(未找到)对于这种情况,我进行了测试:

单元测试:

@RunWith(JMockit.class)
public class ImageServletTest {

@Tested
private ImageServlet servlet;

@Injectable
HttpServletRequest mockHttpServletRequest;

@Injectable
HttpServletResponse mockHttpServletResponse;

@Injectable
PrintWriter printWriter;

@Injectable
ServletOutputStream servletOutputStream;

@Before
public void setUp() throws Exception {
servlet = new ImageServlet();
initMocks(null);
}

private void initMocks(final String imgId) throws Exception {
new NonStrictExpectations() {{
mockHttpServletRequest.getParameter("id");
result = imgId;

mockHttpServletResponse.getWriter();
result = printWriter;

mockHttpServletResponse.getOutputStream();
result = servletOutputStream;
}};
}

@Test
public void testImageNotFound() throws Exception {
servlet.doGet(mockHttpServletRequest, mockHttpServletResponse);
org.junit.Assert.assertTrue(mockHttpServletResponse.getStatus() == HttpServletResponse.SC_NOT_FOUND);
}

}

问题是我的断言失败,因为mockHttpServletResponse.getStatus()总是返回0,有没有办法使用JMockit获取servlet的结果状态代码?

最佳答案

我不熟悉所有最新的 JMockit 注入(inject)内容,因此我使用了 JMockits 对“假货”的支持。

@RunWith(JMockit.class)
public class ImageServletTest3 {

@Test
public void testImageNotFound() throws Exception {
ImageServlet servlet = new ImageServlet();

servlet.doGet(
new MockUp<HttpServletRequest>() {
@Mock
public String getParameter(String id){
return null;
}

}.getMockInstance(),
new MockUp<HttpServletResponse>() {
@Mock
public void sendError(int num){
Assert.assertThat(num, IsEqual.equalTo(404));
}
}.getMockInstance()
);
}

}

关于java - 使用 Jmockit 进行 Servlet JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31689729/

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