JUnit4单元测试以及简单实现

随着我们的项目深入,代码量也越来越多。这时如果出现BUG,面对成千上万行代码,一步一步调试效率实在低。所以理应在开发的过程中,每写出一个函数或方法,就当即测试该函数是否正确或者是否达到我们想要的效果。我们应当确保每一个函数都是正确的,需要对函数进行方方面面的测试,这样的测试我们就叫做单元测试

JUnit是一个Java语言的单元测试框架。用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。

它包括以下特性:

  • 用于测试期望结果的断言(Assertion)
  • 用于共享共同测试数据的测试工具
  • 用于方便的组织和运行测试的测试套件
  • 图形和文本的测试运行器

JUnit的最新版是JUnit5,各位可以登录JUnit5的主页了解详情:https://junit.org/junit5/
它的一些新特性可以参考chszs的专栏

学习中使用的是JUnit4。多数Java的开发环境都已经集成了JUnit作为单元测试的工具,这里我们使用Eclipse。

创建一个Java项目,在项目中导入JUnit4
JUnit4单元测试以及简单实现_第1张图片
在src包文件夹中创建util包,在util包中建立一个实现两数加减乘除的工具类

package util;
/**
 * 
 * @ClassName: Calculate
 * @Description: 被测试类(包含加减乘除运算)
 *
 */
public class Calculate {

    public int add(int a, int b) {
        return a+b;
    }

    public int subtract(int a, int b) {
        return a-b;
    }

    public int multiply(int a, int b) {
        return a*b;
    }

    public int divide(int a, int b) {
        return a/b;
    }
}

之后我们创建一个test的包文件夹,存放我们的测试类。
这里写图片描述

在test包下, 新建一个JUnit测试用例CalculateTest
JUnit4单元测试以及简单实现_第2张图片

新建完成之后eclipse会为我们自动生成一个测试方法模板
这里写图片描述

在这里写出四个测试方法,分别对应加减乘除

package test;

import static org.junit.Assert.*;

import org.junit.Test;

import util.Calculate;

public class CalculateTest {

    @Test
    public void testAdd() {
        assertEquals(6, new Calculate().add(3, 3));    // 预期值是6,执行加法3+3
    }

    @Test
    public void testSubtract() {
        assertEquals(3, new Calculate().subtract(5, 2));    // 预期值3,执行减法5-2
    }

    @Test
    public void testMultiply() {
        assertEquals(10, new Calculate().multiply(5, 2));    // 预期值10,执行乘法5*2
    }

    @Test
    public void testDivide() {
        assertEquals(2, new Calculate().divide(5, 2));    // 预期值2,执行除法5/2
    }
}

在这里我们调用的是JUnit包中的assertEquals方法,该方法传递两个参数,分别是预期值以及被测试方法的返回结果。

写好之后右键—>运行—>JUnit测试
JUnit4单元测试以及简单实现_第3张图片
这里测试的每个方法正确

补充:除了上面的assertEquals方法之外,Junit包中还提供了许多断言方法
JUnit4单元测试以及简单实现_第4张图片
例如,判断一个条件是否正确的assertTrue(boolean condition),判断一个obj数组和预期数组是否同等assertArrayEquals(Object[] expecteds, Object[] actuals) ,具体可翻阅Junit帮助文档
https://junit.org/junit4/javadoc/latest/index.html


(续)我们还可以单独测试一个方法,以testAdd()为例
这里写图片描述
点开测试类的小箭头,在testADD()方法一栏右键—>运行方式—>JUnit测试 即可

假设我们把testAdd()中的预期值参数改成5,显然,测试为错
这里写图片描述
JUnit4单元测试以及简单实现_第5张图片

我们再将除法测试参数改为(5,0),因除数不能为0,因此会抛出算术异常
这里写图片描述
JUnit4单元测试以及简单实现_第6张图片

小结:

  • 测试方法上必须使用@Test进行修饰
  • 测试方法必须使用public void 进行修饰,测试方法不能带任何参数
  • 测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
  • Failure一般由单元测试使用的断言方法判断失败所引起的,表示在测试点发现了问题,就是说程序输出的结果和我们的预期不一样
  • error是由代码异常引起的,它可能产生于测试代码本身的错误,也可能是被测试代码中的一个隐藏的bug
  • 测试用例不是用来证明你是对的,而是用来证明你没有错
  • 两种规范:
    1、测试类使用Test作为类名的后缀
    2、测试方法使用test作为方法名的前缀

你可能感兴趣的:(学习笔记)