读书人

引见大家一个好的测试Spring Controll

发布时间: 2012-10-26 10:30:59 作者: rapoo

介绍大家一个好的测试Spring Controller的框架
可能大家都知道了。知道的就掠过吧。
其实我想说的就是Spring原厂的Test, 文档可以参见这里:
http://static.springframework.org/spring/docs/2.5.x/reference/testing.html

我给大家一个我写的例子吧。里面有如何mock request/response, 如何往servlet context里面放从xml里面读出来的bean. 例子里面的两个文件就是Spring的bean文件。

这个框架比instinct啊, Jmock啊用起来好不少呢。测试spring+struts应该也同理。

public class SecuredControllerTest extends TestCase {    private HttpServletRequest request = new MockHttpServletRequest();    private HttpServletResponse response = new MockHttpServletResponse();    private XmlWebApplicationContext context;    private MockServletContext msc;    private SecuredController securedController;    protected void setUp() throws Exception {        String[] contexts = new String[] { "tempo-ui-fw-servlet.xml", "tempo-ui-fw.xml" };        context = new XmlWebApplicationContext();        context.setConfigLocations(contexts);        msc = new MockServletContext();        context.setServletContext(msc);        context.refresh();        msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);    }    @Test    public void testShowFormWithoutUser() throws Exception {        securedController = (SecuredController) context.getBean("tasksController");        ModelAndView mav = securedController.showForm(request, response, null);        Assert.assertTrue(mav.getView().toString().contains(Constants.LOGIN_URL));    }    @Test    public void testShowFormWithUser() throws Exception {        FakeUIFWApplicationState state = new FakeUIFWApplicationState();        User currentUser = new User("test1", new String[] { "test/test1" }, "token1");        state.setCurrentUser(currentUser);        request.getSession().setAttribute("APPLICATION_STATE", state);        securedController = (SecuredController) context.getBean("tasksController");        ModelAndView mav = securedController.showForm(request, response, new BindException(currentUser, "test"));        Assert.assertEquals(mav.getViewName(), "tasks");    }    @Test    public void testProcessFormSubmissionWithoutUser() throws Exception {        securedController = (SecuredController) context.getBean("tasksController");        ModelAndView mav = securedController.processFormSubmission(request, response, null, null);        Assert.assertTrue(mav.getView().toString().contains(Constants.LOGIN_URL));    }    @Test    public void testProcessFormSubmissionWithUser() throws Exception {        FakeUIFWApplicationState state = new FakeUIFWApplicationState();        User currentUser = new User("test1", new String[] { "test/test1" }, "token1");        state.setCurrentUser(currentUser);        request.getSession().setAttribute("APPLICATION_STATE", state);        securedController = (SecuredController) context.getBean("tasksController");        ModelAndView mav = securedController.processFormSubmission(request, response, null, new BindException(currentUser, "test"));        Assert.assertEquals(mav.getViewName(), "tasks");    }    @Test    public void testProcessFormSubmissionInvalidActionWithUser() throws Exception {        MockHttpServletRequest mockRequest = new MockHttpServletRequest();        mockRequest.addParameter("actionName", "getTaskList");        request = mockRequest;        FakeUIFWApplicationState state = new FakeUIFWApplicationState();        User currentUser = new User("test1", new String[] { "test/test1" }, "token1");        state.setCurrentUser(currentUser);        request.getSession().setAttribute("APPLICATION_STATE", state);        securedController = (SecuredController) context.getBean("tasksController");        try {            ModelAndView mav = securedController.processFormSubmission(request, response, null, new BindException(currentUser, "test"));            Assert.fail("Invalid Action exception expected");        } catch (Exception e) {        }    }    @Test    public void testProcessFormSubmissionValidActionWithUser() throws Exception {        MockHttpServletRequest mockRequest = new MockHttpServletRequest();        mockRequest.addParameter("actionName", "default");        request = mockRequest;        FakeUIFWApplicationState state = new FakeUIFWApplicationState();        User currentUser = new User("test1", new String[] { "test/test1" }, "token1");        state.setCurrentUser(currentUser);        request.getSession().setAttribute("APPLICATION_STATE", state);        securedController = (SecuredController) context.getBean("tasksController");        ModelAndView mav = securedController.processFormSubmission(request, response, null, new BindException(currentUser, "test"));        Assert.assertEquals(mav.getViewName(), "tasks");    }        @Test    public void testGetCurrentUser() throws Exception {        FakeUIFWApplicationState state = new FakeUIFWApplicationState();        User currentUser = new User("test1", new String[] { "test/test1" }, "token1");        state.setCurrentUser(currentUser);        request.getSession().setAttribute("APPLICATION_STATE", state);        securedController = (SecuredController) context.getBean("tasksController");        String userName = securedController.getCurrentUserName(request);        Assert.assertEquals("test1", userName);    }}


读书人网 >软件架构设计

热点推荐