【前 言】按照惯例,在实际项目中我往往会对自己编写的程序进行测试,当测试通过后才能将其用于实战中,当然,编写单元测试是不可避免的,可以直接清晰的检验出 我们程序的可靠性、可只执行性,从中发现问题从而得到及时的解决,这里我就谈谈我们项目里Junit编写规范、模板,其中包括对web层、业务层的分布单 元测试。

【目录】
          -----1.Struts2Junit实现Web层单元测试
          -----2.SpringJunit实现业务层单元测试

【内容】
 
       
一、编写struts2Junit(依赖包:struts2-junit-plugin-2.1.8.jar,junit4,xwork-core-
2.2.1.jar,struts2-core-2.2.3.jar,版本号可以任意struts2版本),我以User为例子,下面是UserWebJunit:

  1. /**
  2. * @author fisher
  3. * @description struts2 单元测试用例模板
  4. */
  5.  
  6. public class Struts2JunitTemplate extends StrutsTestCase {
  7.  
  8. /**
  9. * @description 测试ActionMapping,验证资源是否请求
  10. */
  11. @Test
  12. public void testGetActionMapping() {
  13. ActionMapping mapping = getActionMapping("/test/testAction.action");
  14. assertNotNull(mapping);
  15. assertEquals("/test", mapping.getNamespace());//验证命名空间
  16. assertEquals("testAction", mapping.getName());//验证Action名称是否对应
  17. }
  18.  
  19. /**
  20. * @description 创建Action代理,验证请求参数、页面跳转
  21. * @throws Exception
  22. */
  23. @Test
  24. public void testGetActionProxy() throws Exception {
  25. // 在执行Action方法之前,对request进行请求参数设置
  26. request.setParameter("name", "fisher");
  27.  
  28. ActionProxy proxy = getActionProxy("/test/testAction.action");
  29. assertNotNull(proxy);
  30. proxy.setExecuteResult(false);
  31.  
  32. @SuppressWarnings("rawtypes")
  33. UserAction action = (UserAction ) proxy.getAction();//通过ActionProxy获得UserAction实例
  34. assertNotNull(action);
  35.  
  36. String result = proxy.execute();//执行execute方法,返回结果
  37. assertEquals(Action.SUCCESS, result);//比对返回结果是否和UserAction中的执行结果一致
  38. }
  39.  
  40. }

  二、编写SpringJunit(依赖包:spring-test-3.0.4.RELEASE.jar,junit4,以及其他的spring核心包),还是以User为例子,我们编写UserTestUnit来验证我们后台的方法,如下:

  1. /**
  2. * @author fisher
  3. * @description 用户业务测试
  4. */
  5. // 使用springJunit4
  6. @RunWith(SpringJUnit4ClassRunner.class)
  7. // spring配置文件加载(locations为文件路径)
  8. @ContextConfiguration(locations = {
  9. "classpath:spring/application-hibernate.xml",
  10. "classpath:spring/application-common-service.xml",
  11. "classpath:spring/application-sys-service.xml" })
  12. public class UserTestJunit {
  13. @Autowired
  14. UserService userService;// 自动注入userService
  15.  
  16. /**
  17. * @description 测试查询用户
  18. * @throws Exception
  19. */
  20. @Test
  21. public void query() throws Exception {
  22. List result = userService.getAllEmployee();
  23. Assert.notEmpty(result);
  24. }
  25.  
  26. /**
  27. * @description 测试用户添加
  28. * @throws Exception
  29. */
  30.  
  31. @Test
  32. public void save() throws Exception {
  33. User user = new User();
  34. user.setUsrCode("test001");
  35. user.setUsrName("test");
  36. user.setPassword("123");
  37. user.setIdCard("513029198503140026");
  38. user.setEmail("aaa@sina.com");
  39. User u = userService.save(user);
  40. Assert.notNull(u);
  41. org.junit.Assert.assertEquals("test", user.getUsrName());
  42. }
  43.  
  44. /**
  45. * @description 测试用户更新
  46. * @throws Exception
  47. */
  48.  
  49. @Test
  50. public void update() throws Exception {
  51. User user = new User();
  52. user.setUsrCode("test001");
  53. user.setUsrName("test");
  54. user.setPassword("123");
  55. user.setIdCard("513029198503140026");
  56. user.setEmail("aaa@sina.com");
  57. User u = userService.update(user);
  58. Assert.notNull(u);
  59. org.junit.Assert.assertEquals("test", user.getUsrName());
  60. }
  61.  
  62. /**
  63. * @description 测试用户删除
  64. * @throws Exception
  65. */
  66.  
  67. @Test
  68. public void del() throws Exception {
  69. User user = new User();
  70. user.setUserId("1");
  71. User u = userService.delete(user);
  72. Assert.notNull(u);
  73. org.junit.Assert.assertEquals("1", user.getUserId());
  74. }
  75. }

【总结】单元测试不仅限于此,灵活性比较大,要结合实际进行编写,上面两种测试是按照我们项目中规范编写,大家可以作为参考,自我觉得还是比较实用而且用注解方式比较方便。

《项目架构那点儿事》——快速构建Junit用例的更多相关文章

  1. 《项目架构那点儿事》——Hibernate泛型Dao,让持久层简洁起来

    [前言]hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据 库.同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么 ...

  2. 《项目架构那点儿事》——浅析web层struts2的构建

    [前言]所谓快速开发,实质上为了节省项目的开支成本,减少程序员的开发时 间,固然就形成了种种二次封装的框架,也就是造轮子,然后我们的程序就按照这个轮子去画瓢,这里我就把公司这几次开发系统的框架源码贴出 ...

  3. vue2.x利用脚手架快速构建项目并引入bootstrap、jquery

    要使用vue-cli脚手架搭建项目,首先需要安装node.js Node.js官网:https://nodejs.org/en/download/ 选择你对应的系统即可下载,下载完成后傻瓜式安装即可. ...

  4. springboot:快速构建一个springboot项目

    前言: springboot作为springcloud的基础,springboot的热度一直很高,所以就有了这个springboot系列,花些时间来了解和学习为自己做技术储备,以备不时之需[手动滑稽] ...

  5. 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目

     随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...

  6. VUE项目快速构建

    IDE  :VScode 1.新建项目文件夹 ctrl+~   调出命令板,/IDE找到当前文件夹右键 点击‘在命令提示符中打开’ 安装 node:官网(https://nodejs.org/en/d ...

  7. [开源]快速构建一个WebApi项目

    项目代码:MasterChief.DotNet.ProjectTemplate.WebApi 示例代码:https://github.com/YanZhiwei/MasterChief.Project ...

  8. SpringBoot系列——快速构建项目

    前言 springboot官方参考指南:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/ Spri ...

  9. 用vue-cli快速构建项目

    用vue-cli脚手架快速构建项目的过程:1.首先要在node的环境下安装: 1>安装node:https://nodejs.org/en/(带npm,但是npm太慢了,建议安装cnpm,cnp ...

随机推荐

  1. FTP基本操作类大全,外加c#基础公共帮助类

    总结平时用到的一些FTP操作类,方便需要的用到.github地址:https://github.com/Jimmey-Jiang/Common.Utility 1.连接FTP服务器 /// <s ...

  2. Python中map()函数浅析

    MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下. 文档中的介绍在这里: map(function, iterable, .. ...

  3. java web Servlet 学习笔记 -3 会话管理技术

     Cookie和HttpSession 什么是会话: 用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 每个用户在使用浏览器与服务器进行会话的过 ...

  4. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  5. Jquery实现数据双向绑定(赋值和取值),类似AngularJS

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  6. C# XML序列化方法和常用特性

    /* C#对象XML序列化(一):序列化方法和常用特性 .Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和 ...

  7. HttpHelper类使用方法

    HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = "http://www.sufeinet ...

  8. Masonry框架源码深度解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  9. jQuery和AngularJS的区别

    这篇文章主要介绍了jQuery和AngularJS的区别浅析,本文着重讲解一个熟悉jQuery开的程序员如何应对AngularJS中的一些编程思想的转变,需要的朋友可以参考下   最近一直在研究ang ...

  10. java集合相关问题

    1.Map/Set 的 key 为自定义对象时,必须重写 hashCode 和 equals: 2.ArrayList 的 subList 结果不可强转成 ArrayList,否则会抛出 ClassC ...