JUnit最佳实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class CardServiceTest {
    /**
     * 最佳实践:
     * 1. 测试方法上必须使用@Test进行修饰
     * 2. 测试方法必须使用public void 进行修改,不能带任何的参数
     * 3. 新建一个源代码目录存放我们的测试代码,测试类的包和被测试的一致
     * 4. 测试单元中每个方法必须独立测试,不能有任何依赖
     * 5. 测试类使用Test作为后缀,测试方法使用Test作为后缀(看个人喜好) 
     */
     
    @Test
    public void addTest(){
        // 使用断言
        assertEquals(6new CardService().add(3,3));
    }
     
}
如下目录结构


运行结果说明


1. Failure 一般由于单元测试使用的断言方法判断失败所引起的,就是说程序输出的结果和我们预期的不一样。
2. Errors 是由代码异常引起的,可能是测试代码本身错误或是被测试代码中的bug。
3. 一切都成功进度条显示绿色
PS:测试用户不是用来证明你是对的,用来证明你没有错

JUnit常用注解说明

1. @BeforeClass修饰的方法会在所有方法被调用前执行,该方法是静态的,测试类被加载就会运行它,而且内存中只有一个实例存在,它比较适合加载配置文件等。
2. @AfterClass所修饰的方法通常用来对资源的清理,如管理数据库的连接等
3. @Before和@After会在每个测试方法的前后各执行一次。
4. @Test 将一个普通的方法修饰成一个测试方法
    @Test(expected=XX.class) -预测的异常
    @Test(timeout=2000) - 单位毫秒
5. @Ignore 会被测试运行器忽略
6. @RunWith 可以更改测试运行器 org.junit.runner.Runner

JUnit4中的测试套件

1
2
3
4
5
6
7
8
9
10
@RunWith(Suite.class)
@Suite.SuiteClasses({ EquipmentServiceTest.class, UserServiceTest.class })
public class CardServiceTest {
    /**
     * 测试套件就是组织测试类一起运行
     * 1. 写一个作为测试套件的入口类,这个类里不包含其他方法
     * 2. 更改测试类的运行器Suite.class
     * 3. 将要测试的类作为数组传入到Suite.SuiteClass({})
     */
}   

JUnit4的参数化设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@RunWith(Parameterized.class)
public class CardServiceTest {
    /**
     * 1. 更改默认的测试运行器为@RunWith(Parameterized.class)
     * 2. 声明变量来存放预期值和结果值
     * 3. 声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰
     * 4. 为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值
     */
    int expected = 0;
    int input1 = 0;
    int input2 = 0;
 
    @Parameters
    public static Collection<Object[]> t() {
        return Arrays.asList(new Object[][] { { 312 }, { 422 } });
    }
 
    public CardServiceTest(int expected, int input1, int input2) {
        this.expected = expected;
        this.input1 = input1;
        this.input2 = input2;
    }
 
    @Test
    public void addTest() {
        // 会运行两次,数值分别是上面@Parameters声明的数值
        assertEquals(expected, new CardService().add(input1, input2));
    }
}

参考:慕课网    

JUnit4快速入门的更多相关文章

  1. Java 单元测试 JUnit4 快速入门

    JUnit最佳实践 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class CardServiceTest {     /**      * 最佳 ...

  2. SpringMvc_快速入门,深入分析

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  3. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  4. Spring_MVC_教程_快速入门_深入分析

    Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...

  5. Activiti第一篇【介绍、配置开发环境、快速入门】

    Activiti介绍 什么是Activiti? Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开 ...

  6. SpringData 基于SpringBoot快速入门

    SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...

  7. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  8. (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中

    利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目  Dao   (jar)   Service (jar)   Controller (web) ...

  9. Spring Boot 2.x 快速入门(上)HelloWorld示例

    本文重点 最近决定重新实践下Spring Boot的知识体系,因为在项目中遇到的总是根据业务需求走的知识点,并不能覆盖Spring Boot完整的知识体系,甚至没有一个完整的实践去实践某个知识点.最好 ...

随机推荐

  1. 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法

    几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...

  2. Redis集群教程(Redis cluster tutorial)

    本博文翻译自Redis官网:http://redis.io/topics/cluster-tutorial        本文档以温和的方式介绍Redis集群,不使用复杂的方式来理解分布式系统的概念. ...

  3. 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题

    1新建一个存储git的文件夹,命令是: toto@toto-K45VD:~$ mkdir gitfolder 2初始化一个git仓库,命令是: toto@toto-K45VD:~$cd gitfold ...

  4. 集合框架之Collections静态工具类

    Collections类提供了一些列静态的方法,用以更方便地操作集合类 排序机制 一个List可以通过下面的方法进行排序: Collections.sort(list); 如果List包含的是字符串, ...

  5. javascript之Style对象

    Background 属性 属性                                 描述 background                      在一行中设置所有的背景属性 ba ...

  6. 单幅图像的深度学习,对NYU数据集进行划分

    针对分割问题,官方已经划分好了:http://cs.nyu.edu/~silberman/projects/indoor_scene_seg_sup.html import numpy as np i ...

  7. 使用LRU算法缓存图片,android 3.0

    在您的UI中显示单个图片是非常简单的,如果您需要一次显示很多图片就有点复杂了.在很多情况下 (例如使用 ListView, GridView 或者 ViewPager控件), 显示在屏幕上的图片以及即 ...

  8. NoSQL数据库之Redis数据库:Redis的介绍与安装部署

     NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的w ...

  9. EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证

     { field : 'startPort', title : "起始端口", editor: "text", width : 50, editor: { ...

  10. 最简单的基于FFmpeg的内存读写的例子:内存播放器

    ===================================================== 最简单的基于FFmpeg的内存读写的例子系列文章列表: 最简单的基于FFmpeg的内存读写的 ...