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. 一切都成功进度条显示绿色

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
7. @FixMethodOrder(MethodSorters.NAME_ASCENDING) // 类注解,设置运行类时方法的执行顺序规则,具体参数说明查看MethodSorters源码

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的参数化设置


        Junit 4 引入了一个新的功能参数化测试。参数化测试允许开发人员使用不同的值反复运行同一个测试。
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声明的数值{ 3, 1, 2 }和 { 4, 2, 2 },所以输出两次true
        assertEquals(expected, new CardService().add(input1, input2));
    }
}


参考:慕课网    
6. @RunWith 可以更改测试运行器 org.junit.runner.Runner
7. @FixMethodOrder(MethodSorters.NAME_ASCENDING) // 类注解,设置运行类时方法的执行顺序规则,具体参数说明查看MethodSorters源码

Java 单元测试 JUnit4 快速入门的更多相关文章

  1. Java程序员快速入门Go语言

    这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将 ...

  2. 原!!关于java 单元测试Junit4和Mock的一些总结

    最近项目有在写java代码的单元测试,然后在思考一个问题,为什么要写单元测试??单元测试写了有什么用??百度了一圈,如下: 软件质量最简单.最有效的保证: 是目标代码最清晰.最有效的文档: 可以优化目 ...

  3. 【Java】Spring快速入门(一)

    Spring介绍 Spring可以轻松创建Java企业应用程序.它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创建多 ...

  4. Java 高级 --- 多线程快速入门

    这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书 多线程快速入门 1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组 ...

  5. 从net到java:MyBatis快速入门

    第一:这不是net与java的对比,只是我学习java相关知识梳理的笔记. 第二:这也没有否认net,只是现在的工作需要自己会java. 第三:这不深入.只是我看了些官网和网上的视频,算是入门的总结. ...

  6. JUnit4快速入门

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

  7. Java基础组件快速入门

    最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜.现在手头的工作基本完成了,因此打算好好来归纳下java的相关工具库,将来需要借助你们,好 ...

  8. Java核心编程快速入门

    Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...

  9. 【Java】Junit快速入门

    Junit介绍 JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUnit ...

随机推荐

  1. [Ubuntu 16.04 LTS ]屏幕分辨率 Unknown display

    新装完Ubuntu 16.04 LTS 通过System settings-->Displays 设置屏幕分辨率 显示"Unknown display",选择后无反应,并且屏 ...

  2. SSH执行hql报错:Caused by: org.hibernate.hql.ast.QuerySyntaxException: user is not mapped [from user where username = ?]

    报错信息: ERROR Dispatcher:38 - Exception occurred during processing request: user is not mapped [from u ...

  3. Java:扩展后的赋值运算符(带强转功能)

    扩展后的赋值运算符,即 +=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=,>>>=. 代码实例一: byte a=5; a=a+5; 此 ...

  4. [SDOI2008]Cave 洞穴勘测

    题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假 ...

  5. [AH/HNOI2017]影魔

    题目背景 影魔,奈文摩尔,据说有着一个诗人的灵魂. 事实上,他吞噬的诗人灵魂早已成千上万. 千百年来,他收集了各式各样的灵魂,包括诗人. 牧师. 帝王. 乞丐. 奴隶. 罪人,当然,还有英雄. 题目描 ...

  6. [HNOI2002]彩票

    题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人 ...

  7. bzoj3675[Apio2014]序列分割 斜率优化dp

    3675: [Apio2014]序列分割 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 3508  Solved: 1402[Submit][Stat ...

  8. Sql Server 镜像相关

    http://blog.csdn.net/dba_huangzj/article/details/35995083

  9. SpringCloud学习之SpringCloudStream&集成kafka

    一.关于Spring-Cloud-Stream Spring Cloud Stream本质上就是整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务框 ...

  10. 原生js之canvas时钟组件

    canvas一直是前端开发中不可或缺的一种用来绘制图形的标签元素,比如压缩上传的图片.比如刮刮卡.比如制作海报.图表插件等,很多人在面试的过程中也会被问到有没有接触过canvas图形绘制. 定义 ca ...