在进行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(); } }
相关推荐
内容: 该数据集由Bornemann H、Oosthuizen WC、Schröder M等人于2014年发布,记录了来自Filchner Trough的威德尔海豹(FIL2014_wed_a_f_05)的最大潜水深度。数据集包含了1413个数据点,为研究威德尔海豹的潜水行为提供了宝贵资料。可以通过以下链接访问完整数据集:"" ()。
魔众帮助中心系统基于PHP开发,支持支持快捷导航和常见问题,帮助您搭建一套全面的帮助中心系统。 魔众帮助中心系统发布v3.3.0版本,新功能和Bug修复累计10项,系统内核升级,界面显示优化。
【负荷预测】布谷鸟(CS)算法优化BP神经网络的负荷及天气预测(Matlab代码实现)
【Java】Springboot整合Quertz动态定时任务_pgj
数电大作业篮球竞赛30s计时器源代码及报告
该项目是一款采用Vue框架开发的智能化车间库存盘点系统源码,整合了Java、JavaScript、HTML、Shell等多种编程语言,共计包含249个文件。其中,Java源文件77个,Vue组件72个,JavaScript脚本38个,SCSS样式表26个,XML配置文件10个,SVG图形5个,JSON数据3个,Git忽略文件2个,Markdown文档2个,ICO图标2个,全面支持车间库存管理需求。
C# - 图片抠像 - PP.Matting.HRNET - 含模型 - 完整可运行 。Sdcb.PaddleInference.dll, YamlDotNet.dll,ppmatting-hrnet_w18-human_512
该项目是一款基于C#语言的Cherish科普闯关游戏设计源码,包含107个文件,其中包括56个元数据文件、45个C#源代码文件、4个预制体文件和2个Markdown文件。游戏旨在提供寓教于乐的科普体验。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
该项目为基于Java开发的在线书城设计源码,包含55个文件,涵盖41个Java源文件、10个XML配置文件、2个Git忽略文件、1个YAML文件和1个TXT文件。
sediment core GeoB17621-1的文档记录 内容 Lucchi, RG; Sabbatini, A; Nicolaisen, LS 等(2014)发布了关于沉积物岩芯GeoB17621-1的详细文档。该文档可通过DOI:"10.1594/PANGAEA.838871" () 获取。不过,当前文档的大小信息尚未提供。此研究对于了解特定地质层的历史及其变化具有重要意义。
图像处理新思路:微生物菌落图像分割
【Java】Springboot整合Quertz动态定时任务
无人机目标检测系统源码和数据集:改进yolo11-efficientViT
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
该项目是一款基于SpringBoot和Vue框架构建的Java智能教学资源推荐及在线问卷调查系统源码,包含144个文件,其中包括74个Vue组件文件、23个JavaScript脚本文件、22个PNG图片文件、7个JPG图片文件、5个CSS样式文件、3个Markdown文档、3个批处理文件、2个JSON配置文件、1个ICO图标文件和1个HTML文件。系统通过智能算法推荐教学资源,并支持在线问卷调查功能,适用于提升教学质量和学生学习体验。
基于树莓派和OpenCV的人脸识别
【springboot】springboot系列学习,现如今已经整合了redis(缓存中间件,键值数据库),kafka(消息中间件)
【Java】基于Java的的定时任务调度工具