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. ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation

    ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...

  2. 28 自定义View流式布局

    流式布局每行的行高以本行中最高的元素作为高,如果一个元素放不下到一行时直接到第二行 FlowLayoutView package com.qf.sxy.customview05.widget; imp ...

  3. activiti 多实例任务

    1.1.1. 前言 个人,那么当5个人都投票的时候大概分为如下几种: 1.部门所有人都去投票,当所有人都投票完成的时候,这个节点结束,流程运转到下一个节点.(所有的人都需要投票) 2.部门所有人都去投 ...

  4. PGM:有向图模型:贝叶斯网络

    http://blog.csdn.net/pipisorry/article/details/52489270 为什么用贝叶斯网络 联合分布的显式表示 Note: n个变量的联合分布,每个x对应两个值 ...

  5. 协议系列之UDP协议

    上节说的TCP协议虽然提供了可靠的传输,但是也有一个缺点,发送速度慢.那么有没有一种协议能快速发送的呢?这节要讨论的就是UDP协议,它提供了更加快的发送速度,但也牺牲了可靠性,它是一种无连接的传输协议 ...

  6. 手动添加SSH支持、使用c3p0

    之前做的笔记,现在整理一下:大家有耐心的跟着做就能成功: SSH(struts2.spring.hibernate) *  struts2      *  充当mvc的角色 *  hibernate ...

  7. Gazebo機器人仿真學習探索筆記(二)基本使用說明

    在完成Gazebo7安裝後,需要熟悉Gazebo,方便之後使用. 部分源代碼可以參考:https://bitbucket.org/osrf/gazebo/src/ 如果還沒有安裝請參考之前內容完成安裝 ...

  8. NewSQL数据库VoltDB特性简介

    VoltDB是一个革命性的新型数据库产品,被称作NewSQL数据库.它基于H-Store,号称比当前数据库产品的吞吐量高45倍,同时又具有很高的扩展性.它的特性主要有以下几点: Ø  高吞吐.低延迟: ...

  9. ormlite介绍一

    概述       ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具. 官方网站:http://ormlite.com ...

  10. Python爬虫! 单爬,批量爬,这都不是事!

    昨天做了一个煎蛋网妹子图的爬虫,个人感觉效果不错.但是每次都得重复的敲辣么多的代码(相比于Java或者其他语言的爬虫实现,Python的代码量可谓是相当的少了),就封装了一下!可以实现对批量网址以及单 ...