使用Jmockit进行Servlet JUnit测试 [英] Servlet JUnit test using Jmockit

查看:322
本文介绍了使用Jmockit进行Servlet JUnit测试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want build a unit test for a Servlet using JUnit and JMockit.

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

I have an ImageServlet which takes image IDs (String) as request parameters and if ID is null the servlet throws a HTTP status code 404 (not found) for this scenario I have the test:

单元测试:

@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的结果状态代码?

the problem is that my Assertion fails as mockHttpServletResponse.getStatus() always returns 0, is there a way to get the resulting Status code of the servlet using JMockit?

推荐答案

我对所有最新的JMockit注入工具都不熟悉,因此我使用了JMockits对伪造"的支持.

I'm not familiar with all the latest JMockit injection stuff, so I used JMockits support for "fakes".

@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()
       );
    }

}

这篇关于使用Jmockit进行Servlet JUnit测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆