博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单元测试代码:SpringTest+JUnit
阅读量:4706 次
发布时间:2019-06-10

本文共 4025 字,大约阅读时间需要 13 分钟。

 
/** * JUnit单元测试父类,配置了Spring的基础环境。 
* 可以作为Controller、Service、Dao单元测试的父类。 * * @author leiwen@fansunion.cn */public class JUnitTestBase { public static XmlWebApplicationContext context = null; private static HandlerMapping handlerMapping; private static HandlerAdapter handlerAdapter; // /public static String[] CONFIG_FILES = { "classpath:spring-*.xml" }; // public static String[] configs = { "file:src/main/resources/spring-*.xml" // }; public static String[] CONFIG_FILES = { "file:src/main/resources/spring-*.xml" }; /** * 读取spring配置文件,初始化上下文。 */ @BeforeClass public static void setUp() { System.out.println("Test start..."); context = new XmlWebApplicationContext(); context.setConfigLocations(CONFIG_FILES); MockServletContext msc = new MockServletContext(); context.setServletContext(msc); context.refresh(); msc.setAttribute( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context); handlerMapping = (HandlerMapping) context .getBean(DefaultAnnotationHandlerMapping.class); handlerAdapter = (HandlerAdapter) context.getBean(context .getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]); } // 执行request对象请求的action public ModelAndView excuteAction(HttpServletRequest request, HttpServletResponse response) throws Exception { // 这里需要声明request的实际类型,否则会报错 request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true); HandlerExecutionChain chain = handlerMapping.getHandler(request); Object handler = chain.getHandler(); final ModelAndView model = handlerAdapter.handle(request, response, handler); return model; } @AfterClass public static void tearUp() { System.out.println("Test end!"); }} //测试Controller的2种方法 /** * CampaignGroupController单元测试。 * * @author leiwen@fansunion.cn */public class FansUnionControllerTestextends JUnitTestBase { @Test public void prevAddCampaignGroup() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); String requestURI = "/campaignGroup/prevAdd"; request.setRequestURI(requestURI); request.setMethod("POST"); final ModelAndView mav = this.excuteAction(request, response); Assert.assertEquals("createCampaignGroup", mav.getViewName()); } @Test public void prevAddCampaignGroup2() throws Exception { CampaignGroupController userController = context.getBean(CampaignGroupController.class); MockMvc mockMvc = MockMvcBuilders.standaloneSetup(userController) .build(); ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.post("/campaignGroup/prevAdd")); ResultActions andExpect = perform .andExpect(MockMvcResultMatchers.status().is(200)); andExpect .andExpect( MockMvcResultMatchers.view() .name("createCampaignGroup")); }} ----需要配置2个bean,测试Controller需要用到
测试Service(Dao类似)/** * 这种方式 的单元测试,不需要重复指定 资源文件,减少重复。 麻烦的地方在于,需要手动获取bean。 * * @author leiwen@fansunion.cn */public class FansUnionServiceTest extends JUnitTestBase { private static CampaignGroupService campaignGroupService = context .getBean(CampaignGroupService.class); // 测试add,remove,update方法的时候,已经测试了find? @Test public void addCampaignGroup() { CampaignGroup cg = buildOneGroup(); campaignGroupService.add(cg); CampaignGroup dbCampaignGroup = campaignGroupService.find(cg.getId()); Assert.assertEquals(cg, dbCampaignGroup); campaignGroupService.delete(cg.getId()); } 基于注解的测试/** * * 基于注解的单元测试。 * * @author leiwen@fansunion.cn */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = { "classpath:spring-mvc-context.xml", "classpath:spring-common-context.xml" })public class FansUnionServiceTestWithAnnotation { @Autowired private CampaignGroupService campaignGroupService; /** * 根据campaignId获取campaignGroup的name集合
* 测试场景:
* */ @Test public void testListCampaignGroupNameByCampaignId(){ System.out.println("**********"); System.out.println(campaignGroupService.listCampaignGroupNameByCampaignId(1005899)); }}

参考资料:

 

 

 

转载于:https://www.cnblogs.com/qitian1/p/6463667.html

你可能感兴趣的文章
Understanding the Bias-Variance Tradeoff
查看>>
限制Boltzmann机(Restricted Boltzmann Machine)
查看>>
Objective C 总结(五):扩展现有类 - 类别
查看>>
设计模式之行为型(2)-命令模式(Command)
查看>>
销售系统学习.mdl
查看>>
触发器
查看>>
51nod 1096 距离之和最小 1108 距离之和最小 V2
查看>>
sshd不能连接上的原因
查看>>
mysql配置默认字符集为UTF8mb4
查看>>
WPF实现3D翻转的动画效果
查看>>
自定义圆环进度条
查看>>
UILayer
查看>>
复杂对象写入文件
查看>>
C语言博客作业--一二维数组
查看>>
复利计算3
查看>>
k8s-高级调度方式-二十一
查看>>
[HDU3555]Bomb
查看>>
基于dubbo的分布式系统(一)安装docker
查看>>
Recursion
查看>>
66. Plus One
查看>>