欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JUnit简单入门

程序员文章站 2024-03-15 19:25:06
...

JUnit

JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。

JUnit 注解

import org.junit.jupiter.api.* Import statement for using the following annotations.
@Test 将方法标识为测试方法
@BeforeEach 在每次测试之前执行。通常用于准备测试环境(例如,读取输入数据,初始化类)
@AfterEach 在每个测试之后执行。通常用于清除测试环境(例如,删除临时数据,恢复默认值)。还可以完成清理内存的操作。
@BeforeAll 在所有测试开始之前执行一次。它用于执行时间密集型活动,例如,连接到数据库。使用这个注解标记的方法需要被定义为静态的。
@AfterAll 在所有测试完成后执行一次。 它用于执行清理活动,例如,断开与数据库的连接。 需要将带有此注解的方法定义为静态的。

以上就是最常用的五种注解了。

JUnit 断言

使用JUnit进行单元测试,我们可以使用断言(Assertion)来测试期望结果,可以方便地组织和运行测试,并方便地查看测试结果。

Junit所有的断言都包含在 Assert 类中。

这个类提供了很多有用的断言方法来编写测试用例。只有失败的断言才会被记录。Assert 类中的一些有用的方法列式如下:

方法名 作用
void assertEquals(boolean expected, boolean actual) 检查两个变量或者等式是否平衡
void assertTrue(boolean expected, boolean actual) 检查条件是否为真
void assertFalse(boolean condition 检查条件是否为假
void assertNotNull(Object object) 检查对象是否不为空
void assertNull(Object object) 检查对象是否为空
void assertSame(boolean condition) 检查两个相关对象是否指向同一个对象
void assertNotSame(boolean condition) 检查两个相关对象是否不指向同一个对象
void assertArrayEquals(expectedArray, resultArray) 检查两个数组是否相等

通常我用的最多的还是assertEquals( )方法。

Junit 测试用例

下面就做一个最简单的示例,简单展示用法:

package cn.hust.enhance;
public class Calculator {
    int age;

    /**
     * 加法
     * @param a
     * @param b
     * @return
     */
    public int add(int a,int b){ return a+b; }

    /**
     * 减法
     * @param a
     * @param b
     * @return
     */
    public int sub(int a,int b){
        return a-b;
    }
}

这是一个Calculator类,里面有add( )sub( )两个方法,分别代表加和减操作。

为了测试这两个方法,我们创建一个CalculatorTest类。

package cn.hust.test;

import cn.hust.enhance.Calculator;
import org.junit.jupiter.api.*;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {

    /**
     * 测试add方法
     */
    @Test
    public void testAdd() {
        Calculator calculator=new Calculator();
        int result = calculator.add(1, 2);
        //断言的第一个参数表示预期的值,第二个参数表示运算的结果
        //这里的的计算结果与预期结果是一致的,所以测试通过
        assertEquals(3, result);
        System.out.println("testAdd()");
    }

    /**
     * 测试sub方法
     */
    @Test
    public void testSub() {
        Calculator calculator=new Calculator();
        int result = calculator.sub(1, 2);
         //断言的第一个参数表示预期的值,第二个参数表示运算的结果
        //这里的的计算结果与预期结果是不一致的,所以测试没通过
        assertEquals(1, result);
        System.out.println("testSub()");
    }
}

测试结果如下:

JUnit简单入门

左侧结果显示testSub()方法没有通过,从右边的结果可以看到,testSub()预期的结果是 1,而实际的结果为-1。而且从输出的内容来看,当断言检查的结果不通过时,后面的语句并不会被执行。

CalculatorTest类加上@BeforeEach注解和@AfterEach注解:

新增代码如下:

    /**
     * 初始化方法
     * 在所有方法执行前执行这个方法
     */
    @BeforeEach
    public void init() {
        System.out.println("开始执行");
    }

    /**
     *每个测试方法运行后,运行close()方法
     */
    @AfterEach
    public void close() {
        System.out.println("结束执行");
    }

结果如下:

JUnit简单入门

可以看到,先输出了开始执行,再输出testAdd(),最后输出结束执行。这样当我们需要处理一些公共的事务时,就可以采用@BeforeEach注解和@AfterEach注解。

小结

  1. 定义一个测试用例,测试类名为被测试类名+Test
  2. 定义测试方法:可以独立运行
    1. 方法名:test+测试的方法名
    2. 返回值:void
    3. 参数列表:空参
  3. 给方法加@Test注解,用来识别为测试方法
  4. 存在预处理和收尾的处理时,可以使用@BeforeEach@AfterEach注解,当然也可以用@BeforeAll@AfterAll注解
  5. 关于JUnit还有很多高级的测试内容,比如参数测试、套件测试等,但是目前我用的就只是这些简单的,所以以后有机会再总结一下

参考文章

廖雪峰的官方网站/Java 教程/单元测试

Unit Testing with JUnit - Tutorial

使用 JUnit 进行单元测试