WebInitializer.java:注册相应的web.xml中的组件
package com.sishuok.config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import java.util.EnumSet;
public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(javax.servlet.ServletContext sc) throws ServletException {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(AppConfig.class);
sc.addListener(new ContextLoaderListener(rootContext));
//2、springmvc上下文
AnnotationConfigWebApplicationContext springMvcContext = new AnnotationConfigWebApplicationContext();
springMvcContext.register(MvcConfig.class);
//3、DispatcherServlet
DispatcherServlet dispatcherServlet = new DispatcherServlet(springMvcContext);
ServletRegistration.Dynamic dynamic = sc.addServlet(dispatcherServlet, dispatcherServlet);
dynamic.setLoadOnStartup(1);
dynamic.addMapping(/);
//4、CharacterEncodingFilter
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding(utf-8);
FilterRegistration filterRegistration =
sc.addFilter(characterEncodingFilter, characterEncodingFilter);
filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, /);
}
}
对于WebInitializer,请参考《Spring4新特性——Groovy Bean定义DSL》
到此基本的配置就搞定了,接下来看看如何测试吧。
1.1 以前的测试方式
package com.sishuok.mvc.controller;
//省略import
public class UserControllerTest {
private UserController userController;
@Before
public void setUp() {
userController = new UserController();
//安装userCtroller依赖 比如userService
}
@Test
public void testView() {
MockHttpServletRequest req = new MockHttpServletRequest();
ModelAndView mv = userController.view(1L, req);
ModelAndViewAssert.assertViewName(mv, user/view);
ModelAndViewAssert.assertModelAttributeAvailable(mv, user);
}
}
准备控制器:我们通过new方式创建一个,然后手工查找依赖注入进去(比如从spring容器获取/new的);
Mock Request:此处使用Spring提供的Mock API模拟一个HttpServletRequest,其他的Servlet API也提供了相应的Mock类,具体请查看Javadoc;
访问控制器方法:通过直接调用控制器方法进行访问,此处无法验证Spring MVC框架的类型转换、数据验证等是否正常;
ModelAndViewAssert:通过这个Assert API验证我们的返回值是否正常;
对于单元测试步骤请参考:加速Java应用开发速度3——单元/集成测试+CI
这种方式的缺点已经说过了,如不能走Spring MVC完整流程(不能走Servlet的过滤器链