单元测试代码:SpringTest+JUnit
2019独角兽企业重金招聘Python工程师标准>>>
/*** JUnit单元测试父类,配置了Spring的基础环境。 <br/>* 可以作为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配置文件,初始化上下文。*/@BeforeClasspublic 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对象请求的actionpublic 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;}@AfterClasspublic static void tearUp() {System.out.println("Test end!");}}//测试Controller的2种方法/*** CampaignGroupController单元测试。* * @author leiwen@fansunion.cn*/
public class FansUnionControllerTestextends JUnitTestBase {@Testpublic 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());}@Testpublic 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需要用到<beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean><beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>测试Service(Dao类似)/*** 这种方式 的单元测试,不需要重复指定 资源文件,减少重复。 麻烦的地方在于,需要手动获取bean。* * @author leiwen@fansunion.cn*/
public class FansUnionServiceTest extends JUnitTestBase {private static CampaignGroupService campaignGroupService = context.getBean(CampaignGroupService.class);// 测试add,remove,update方法的时候,已经测试了find?@Testpublic 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 {@Autowiredprivate CampaignGroupService campaignGroupService;/*** 根据campaignId获取campaignGroup的name集合<br>* 测试场景:<br>* */@Testpublic void testListCampaignGroupNameByCampaignId(){System.out.println("**********");System.out.println(campaignGroupService.listCampaignGroupNameByCampaignId(1005899));}}
参考资料:http://lohasle.iteye.com/blog/1617929
http://jiuyuehe.iteye.com/blog/1882424
转载于:https://my.oschina.net/jiutianniao/blog/400245
单元测试代码:SpringTest+JUnit相关推荐
- JUnit编写单元测试代码注意点小结
用eclipse编写单元测试的时候,可以直接选中某个类,然后右键new新疆一个junit case,界面如下图1所示: 图1:新建test case 选 择图1中的JUnit Test Case,然后 ...
- Java单元测试-快速上手Junit
基于Eclipse的单元测试框架Junit入门 Junit简介 JUnit是一个Java语言的单元测试框架,应用它进行单元测试,能够准确.快速地保证程序基本模块的正确性.Junit通过注解的方式来识别 ...
- 在Android Studio进行“简单配置”单元测试(Android Junit)
起因 在Android studio 刚出.本人就想弄单元测试,可惜当时Android studio不知道抽什么风(准确来说,应该是我不会弄而已).无法执行到相应的代码. 后来今天突然自己又抽风.又想 ...
- 单元测试框架之Junit
关于Junit,前面也有一篇文章做了简要概述,这次接着前面没讲到的地方展开 点击:测试方法之JUnit单元测试 一.Junit简介 1. 什么是Junit JUnit是一个 Java 编程语言的单元测 ...
- Android单元测试(一):JUnit框架的使用
JUnit框架的使用 前言 工程介绍 JUnit介绍 什么是JUnit JUnit引入 JUnit注解 JUnit断言 JUnit使用 基础用法 参数化测试 assertThat用法 用法 自定义匹配 ...
- 【android】AS中使用Junit单元测试和Android JUnit 单元测试
AS中使用Junit单元测试和Android JUnit 单元测试 在AndroidStudio中使用单元测试 1. 前言 在Android开发中,如果对一个简单的功能,每次修改代码都重新运行到设备中 ...
- 编写单元测试代码遵守BCDE原则,以保证被测试模块的交付质量,那么下列说法正确的是
多选 编写单元测试代码遵守BCDE原则,以保证被测试模块的交付质量,那么下列说法正确的是:答案在文末 A. Border,边界值测试,包括循环边界.特殊取值.特殊时间点.数据顺序等. B. Corre ...
- python代码覆盖率测试_unittest+coverage单元测试代码覆盖操作实例详解_python
这篇文章主要为大家详细介绍了unittest+coverage单元测试代码覆盖操作的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 基于上一篇文章,这篇文章是关于使用coverage来实现代码 ...
- IDEA中的单元测试模块(Junit)不能自动导包
IDEA中的单元测试模块(Junit)不能自动导包? 问题描述: 解决方法: 问题描述: 在Java学习中,JUnit模块可以说是比不可少的,IDEA经常出现不能自动导入JUnit4的情况,经过多次尝 ...
最新文章
- Linux学习进阶路线图
- Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题
- (实模式+保护模式)模式切换的过程步骤(代码+文字解析)
- 大道至简 7、8、读后感
- java保护访问,Java中的受保护的访问修饰符
- rms归一化_【AutoML】归一化(Normalization)方法如何进行自动学习和配置
- UIKit框架-基础控件Swift版本: 7.UISwitch方法/属性详解
- 软件单元测试及测试用例设计
- Python—WebSocket爬虫实战
- 多线程编程中条件变量和虚假唤醒(spurious wakeup)的讨论
- iphone和android照片传输,iPhone与安卓跨平台如何传照片图文教程
- 另类搞笑:自我指涉例句不完全收集
- 【NOI科目校 信息学知识点测评-组合计数专题】展览方案
- discuz X2数据字典
- 横跨湘江两岸,望城虎年“火力全开” 玩转山水洲城新样板?
- Java毕业设计之ssm流浪猫狗|流浪狗宠物救助网站
- SLMi334兼容TLP5214 一款兼容光耦带保护功能单通道隔离IGBT栅极驱动器
- 商务办公用什么邮箱,注册163.net邮箱怎么样
- 网页突然报502 bad gateway,平台宕掉
- 手写数字识别系统学习(1)