在进行springmvc的开发中有时候进行单元测试又不想去启动服务器,spring提供了AbstractContextLoader可以让我们手动的加载xxx-servlet.xml文件:
1.首先建立一个模仿类
import javax.servlet.ServletContext; import org.springframework.beans.factory.support.BeanDefinitionReader; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigUtils; import org.springframework.core.io.FileSystemResourceLoader; import org.springframework.mock.web.MockServletContext; import org.springframework.test.context.support.AbstractContextLoader; import org.springframework.web.context.support.StaticWebApplicationContext; public class MockServletContextWebContextLoader extends AbstractContextLoader { private static final String SERVLET_CONTEXT_WEB_ROOT = "/webapp"; @Override public final ConfigurableApplicationContext loadContext(String... locations) throws Exception { /* * Use a type which implements ConfigurableWebApplicationContext! */ StaticWebApplicationContext context = new StaticWebApplicationContext(); prepareContext(context); customizeBeanFactory(context.getDefaultListableBeanFactory()); createBeanDefinitionReader(context).loadBeanDefinitions(locations); AnnotationConfigUtils.registerAnnotationConfigProcessors(context); customizeContext(context); context.refresh(); context.registerShutdownHook(); return context; } protected void prepareContext(StaticWebApplicationContext context) { /* * Incorporate mock servlet context! */ ServletContext servletContext = new MockServletContext(SERVLET_CONTEXT_WEB_ROOT, new FileSystemResourceLoader()); servletContext.setAttribute(StaticWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context); context.setServletContext(servletContext); } protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) { } protected BeanDefinitionReader createBeanDefinitionReader(StaticWebApplicationContext context) { return new XmlBeanDefinitionReader(context); } protected void customizeContext(StaticWebApplicationContext context) { } @Override protected String getResourceSuffix() { return "-servlet.xml"; } }
2.编写测试类
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** *把测试交给Spring框架自己来做,继承AbstractJUnit4SpringContextTests *并指定配置文件的路径 */ @ContextConfiguration(inheritLocations = true, loader = MockServletContextWebContextLoader.class,locations = { "file:src/main/webapp/WEB-INF/xxx-servlet.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public class TestBase extends AbstractJUnit4SpringContextTests { // 依赖注入 public @Autowired XxxClass test; @Test public void test() { // TODO // test.xxx(); } }
相关推荐
一个简洁的SrpingMvc的Demo, 包含基于Junit的单元测试。
Hibernate4+SpringMVC+Junit4+log4j环境搭建Jar包下载
springMVC集成junit4需要的jar包 junit-4.10.jar和spring-test-4.2.0.RELEASE.jar
springMVC,mybatis,maven,junit
SpringMVC+Hibernate+Junit4+json基本框架近乎0配置
springMVC junit mybatis整合
springmvc ssh通用的junit测试样例
springmvc+maven+junit+jqueryUI
springmvc+mybatis+maven+junit实现网页的增删查改,
spring+springMVC+mybatis+maven+junit+mysql
maven+springMVC+mybatis+junit整合过程,很详细,我亲测后整理的。
SpringMVC+Hibernate+Junit4基本框架近乎0配置所需jar包
springmvc项目搭建并实现Junit单元测试源码
maven+springMVC+mybatis+junit详细搭建过程整合实现demo,带有jar包和测试类。增删改查的操作供大家学习。内含数据库文件!
springmvc5+hibernate5+junit4+log4j2整合实例 包含 代码实例 数据库建表sql 运行环境 myeclipes2015 jdk 1.8 tomcat 8.0
spring+springmvc+mybatis+maven+junit的整合,适合初学者
用NetBeans建立工程,采用maven实现自动加载和部署。SpringMVC+mybites框架实现了Mysql数据库增删改查基本功能。练习上手的案例。另外集成了Junit和Log4j的使用。
maven+springMVC+mybatis+velocity+mysql+junit项目框架搭建
eclipse创建的springmvc_maven_mybstis3_junit4 web的小demo,测试通过。
十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean ...