可能大家都知道了。知道的就掠过吧。
其实我想说的就是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);
}
}
分享到:
相关推荐
在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...
在IT行业中,Spring框架是Java开发中的一个核心组件,尤其在构建Web应用程序时,它扮演着至关重要的角色。本文将深入探讨"类似Spring Controller注解Demo"这一主题,结合提供的标签"源码"和"工具",我们将分析Spring...
本文将围绕一个基于Maven构建的Spring 4.0框架Demo,深入探讨其核心概念、配置与实践。 一、Spring 4.0的关键特性 1. Java 8支持:Spring 4.0开始全面支持Java 8,包括Lambda表达式和日期时间API,这使得代码更加...
Spring是一个开源的Java平台,它简化了开发过程,提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等核心特性。Spring框架由多个模块组成,包括Core Container、Data...
Spring MVC,作为Spring框架的一部分,引入了Controller概念,它通过注解驱动的方式简化了Web开发。Spring Controller类通常使用`@RequestMapping`等注解来映射HTTP请求,内部集成了一些功能,如模型数据绑定、异常...
1. **Struts2**:这是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,主要用于处理用户请求和业务逻辑。Struts2提供了一种可扩展和灵活的方式来组织应用程序的控制层,通过Action类和配置文件定义了...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建Web应用程序提供模型-视图-控制器(MVC)架构。Spring MVC的核心是解耦应用程序的各个组件,使其能够独立工作并易于测试。在本源码分析中,我们将探讨Spring...
在Spring框架中,当一个对象依赖于另一个对象时,这个依赖的对象不是由调用者自己创建,而是由Spring容器负责创建并注入到需要该对象的地方。依赖注入主要有三种形式: - **构造器注入**:通过构造器参数传递依赖。...
如果涉及到Web开发,Spring框架中的Spring MVC模块是一个强大的MVC框架,用于构建RESTful的Web服务。它提供了控制器、视图解析、数据绑定、验证等功能。通过@Controller、@RequestMapping等注解定义控制器,使用...
在学习过程中,你还将接触到Spring Boot,这是一个基于Spring框架的快速开发工具,它简化了Spring应用的初始搭建和配置过程,让开发者可以更快地专注于业务逻辑。Spring Security则是Spring生态中的安全组件,提供...
你可以通过调用Controller的一个方法来测试日志是否正确记录。 在提供的压缩包文件中,`.classpath`、`.gitignore`、`.project`和`.settings`是项目配置文件,`.springBeans`可能是Spring配置文件,但通常命名为`...
本篇文章将深入探讨如何使用Maven作为构建工具,在Eclipse环境中搭建一个整合了Spring、Spring MVC和Hibernate的项目。 首先,让我们了解Maven。Maven是Apache开发的一款项目管理和综合工具,它通过一个项目对象...
Spring 5.0.2版本是一个重要的更新,它提供了许多新特性和改进,旨在提高开发效率和应用程序的性能。下面将详细介绍Spring框架以及Spring 5.0.2版的关键知识点。 1. **Spring框架概述**: Spring是一个开源的Java...
本文将深入探讨原生Servlet与Spring Controller在性能方面的差异,并基于一个名为"AbTest"的Servlet项目源码进行分析。 首先,原生Servlet是Java EE规范的一部分,它提供了一个基础的接口,用于接收和响应HTTP请求...
总之,Spring框架是一个功能强大且灵活的Java应用开发框架,它的源码可以帮助我们深入学习和理解软件设计原则、DI和AOP等核心概念,以及如何有效地组织和管理企业级应用。通过实践"SpringDemo"项目,你将能更好地...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分。Spring 框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)为核心,而 Spring...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。在本测试实例中,我们将深入了解Spring MVC的核心组件,包括DispatcherServlet、Controller以及...
Spring MVC 是一个基于Java的轻量级Web应用框架,它属于Spring生态的一部分,主要用于构建Web应用程序的后端控制器。这个框架提供了模型-视图-控制器(MVC)的设计模式实现,帮助开发者处理HTTP请求、数据绑定、视图...
3. **Spring MVC**:Spring MVC是Spring框架用于构建Web应用的一个模块。它提供了一个模型-视图-控制器(MVC)架构,有助于分离业务逻辑和表现层。在本章中,你可能将接触到DispatcherServlet、Controller接口、...