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相关推荐

  1. JUnit编写单元测试代码注意点小结

    用eclipse编写单元测试的时候,可以直接选中某个类,然后右键new新疆一个junit case,界面如下图1所示: 图1:新建test case 选 择图1中的JUnit Test Case,然后 ...

  2. Java单元测试-快速上手Junit

    基于Eclipse的单元测试框架Junit入门 Junit简介 JUnit是一个Java语言的单元测试框架,应用它进行单元测试,能够准确.快速地保证程序基本模块的正确性.Junit通过注解的方式来识别 ...

  3. 在Android Studio进行“简单配置”单元测试(Android Junit)

    起因 在Android studio 刚出.本人就想弄单元测试,可惜当时Android studio不知道抽什么风(准确来说,应该是我不会弄而已).无法执行到相应的代码. 后来今天突然自己又抽风.又想 ...

  4. 单元测试框架之Junit

    关于Junit,前面也有一篇文章做了简要概述,这次接着前面没讲到的地方展开 点击:测试方法之JUnit单元测试 一.Junit简介 1. 什么是Junit JUnit是一个 Java 编程语言的单元测 ...

  5. Android单元测试(一):JUnit框架的使用

    JUnit框架的使用 前言 工程介绍 JUnit介绍 什么是JUnit JUnit引入 JUnit注解 JUnit断言 JUnit使用 基础用法 参数化测试 assertThat用法 用法 自定义匹配 ...

  6. 【android】AS中使用Junit单元测试和Android JUnit 单元测试

    AS中使用Junit单元测试和Android JUnit 单元测试 在AndroidStudio中使用单元测试 1. 前言 在Android开发中,如果对一个简单的功能,每次修改代码都重新运行到设备中 ...

  7. 编写单元测试代码遵守BCDE原则,以保证被测试模块的交付质量,那么下列说法正确的是

    多选 编写单元测试代码遵守BCDE原则,以保证被测试模块的交付质量,那么下列说法正确的是:答案在文末 A. Border,边界值测试,包括循环边界.特殊取值.特殊时间点.数据顺序等. B. Corre ...

  8. python代码覆盖率测试_unittest+coverage单元测试代码覆盖操作实例详解_python

    这篇文章主要为大家详细介绍了unittest+coverage单元测试代码覆盖操作的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 基于上一篇文章,这篇文章是关于使用coverage来实现代码 ...

  9. IDEA中的单元测试模块(Junit)不能自动导包

    IDEA中的单元测试模块(Junit)不能自动导包? 问题描述: 解决方法: 问题描述: 在Java学习中,JUnit模块可以说是比不可少的,IDEA经常出现不能自动导入JUnit4的情况,经过多次尝 ...

最新文章

  1. Linux学习进阶路线图
  2. Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题
  3. (实模式+保护模式)模式切换的过程步骤(代码+文字解析)
  4. 大道至简 7、8、读后感
  5. java保护访问,Java中的受保护的访问修饰符
  6. rms归一化_【AutoML】归一化(Normalization)方法如何进行自动学习和配置
  7. UIKit框架-基础控件Swift版本: 7.UISwitch方法/属性详解
  8. 软件单元测试及测试用例设计
  9. Python—WebSocket爬虫实战
  10. 多线程编程中条件变量和虚假唤醒(spurious wakeup)的讨论
  11. iphone和android照片传输,iPhone与安卓跨平台如何传照片图文教程
  12. 另类搞笑:自我指涉例句不完全收集
  13. 【NOI科目校 信息学知识点测评-组合计数专题】展览方案
  14. discuz X2数据字典
  15. 横跨湘江两岸,望城虎年“火力全开” 玩转山水洲城新样板?
  16. Java毕业设计之ssm流浪猫狗|流浪狗宠物救助网站
  17. SLMi334兼容TLP5214 一款兼容光耦带保护功能单通道隔离IGBT栅极驱动器
  18. 商务办公用什么邮箱,注册163.net邮箱怎么样
  19. 网页突然报502 bad gateway,平台宕掉
  20. 手写数字识别系统学习(1)

热门文章

  1. C++(14)--面向对象
  2. 推荐算法概述(01)
  3. 开发中的“软”与“硬”:高画质移动游戏开发之道
  4. 怎样洗头使头发变黑变多
  5. 并发不是并行,它更好!
  6. 世上最伟大的十个公式,质能方程排名第五
  7. css background-attachment:fixed 固定背景、不随内容一起滚动
  8. IDEA配置jdk (SDK)
  9. 在线预览word,excel文档
  10. 列出一个目录中所有文件及大小