`
arkxu
  • 浏览: 43266 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

介绍大家一个好的测试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);
    }
}



5
0
分享到:
评论

相关推荐

    spring MVC junit 单元测试(controller)

    在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...

    类似Spring Controller 注解Demo

    在IT行业中,Spring框架是Java开发中的一个核心组件,尤其在构建Web应用程序时,它扮演着至关重要的角色。本文将深入探讨"类似Spring Controller注解Demo"这一主题,结合提供的标签"源码"和"工具",我们将分析Spring...

    spring4.0框架demo

    本文将围绕一个基于Maven构建的Spring 4.0框架Demo,深入探讨其核心概念、配置与实践。 一、Spring 4.0的关键特性 1. Java 8支持:Spring 4.0开始全面支持Java 8,包括Lambda表达式和日期时间API,这使得代码更加...

    Spring框架开发参考中文手册

    Spring是一个开源的Java平台,它简化了开发过程,提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等核心特性。Spring框架由多个模块组成,包括Core Container、Data...

    原生Servlet与Spring Controller性能比较--Controller项目

    Spring MVC,作为Spring框架的一部分,引入了Controller概念,它通过注解驱动的方式简化了Web开发。Spring Controller类通常使用`@RequestMapping`等注解来映射HTTP请求,内部集成了一些功能,如模型数据绑定、异常...

    SSH和Spring框架简介

    1. **Struts2**:这是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,主要用于处理用户请求和业务逻辑。Struts2提供了一种可扩展和灵活的方式来组织应用程序的控制层,通过Action类和配置文件定义了...

    spring mvc框架源码

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建Web应用程序提供模型-视图-控制器(MVC)架构。Spring MVC的核心是解耦应用程序的各个组件,使其能够独立工作并易于测试。在本源码分析中,我们将探讨Spring...

    Spring框架小结

    在Spring框架中,当一个对象依赖于另一个对象时,这个依赖的对象不是由调用者自己创建,而是由Spring容器负责创建并注入到需要该对象的地方。依赖注入主要有三种形式: - **构造器注入**:通过构造器参数传递依赖。...

    spring框架jar包

    如果涉及到Web开发,Spring框架中的Spring MVC模块是一个强大的MVC框架,用于构建RESTful的Web服务。它提供了控制器、视图解析、数据绑定、验证等功能。通过@Controller、@RequestMapping等注解定义控制器,使用...

    java spring框架学习资料 pdf

    在学习过程中,你还将接触到Spring Boot,这是一个基于Spring框架的快速开发工具,它简化了Spring应用的初始搭建和配置过程,让开发者可以更快地专注于业务逻辑。Spring Security则是Spring生态中的安全组件,提供...

    springaop拦截controller日志

    你可以通过调用Controller的一个方法来测试日志是否正确记录。 在提供的压缩包文件中,`.classpath`、`.gitignore`、`.project`和`.settings`是项目配置文件,`.springBeans`可能是Spring配置文件,但通常命名为`...

    用Maven搭建Spring+Spring MVC+Hibernate框架

    本篇文章将深入探讨如何使用Maven作为构建工具,在Eclipse环境中搭建一个整合了Spring、Spring MVC和Hibernate的项目。 首先,让我们了解Maven。Maven是Apache开发的一款项目管理和综合工具,它通过一个项目对象...

    spring5.0.2框架包.zip

    Spring 5.0.2版本是一个重要的更新,它提供了许多新特性和改进,旨在提高开发效率和应用程序的性能。下面将详细介绍Spring框架以及Spring 5.0.2版的关键知识点。 1. **Spring框架概述**: Spring是一个开源的Java...

    原生Servlet与Spring Controller性能比较--Servlet项目

    本文将深入探讨原生Servlet与Spring Controller在性能方面的差异,并基于一个名为"AbTest"的Servlet项目源码进行分析。 首先,原生Servlet是Java EE规范的一部分,它提供了一个基础的接口,用于接收和响应HTTP请求...

    Spring框架源码

    总之,Spring框架是一个功能强大且灵活的Java应用开发框架,它的源码可以帮助我们深入学习和理解软件设计原则、DI和AOP等核心概念,以及如何有效地组织和管理企业级应用。通过实践"SpringDemo"项目,你将能更好地...

    Spring MVC学习框架

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分。Spring 框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)为核心,而 Spring...

    spring MVC测试实例

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。在本测试实例中,我们将深入了解Spring MVC的核心组件,包括DispatcherServlet、Controller以及...

    spring mvc框架

    Spring MVC 是一个基于Java的轻量级Web应用框架,它属于Spring生态的一部分,主要用于构建Web应用程序的后端控制器。这个框架提供了模型-视图-控制器(MVC)的设计模式实现,帮助开发者处理HTTP请求、数据绑定、视图...

    Spring框架高级编程源代码

    3. **Spring MVC**:Spring MVC是Spring框架用于构建Web应用的一个模块。它提供了一个模型-视图-控制器(MVC)架构,有助于分离业务逻辑和表现层。在本章中,你可能将接触到DispatcherServlet、Controller接口、...

Global site tag (gtag.js) - Google Analytics