JUnit使用入门

栏目: Java · 发布时间: 5年前

内容简介:相信大部分新手在测试程序的时候都喜欢在方法中使用JUnit是一个Java语言的单元测试框架。它不仅可以根据测试数据来验证程序的正确性,还将测试代码与工程代码分离,此外它还可以进行批量测试程序,极大的方便了测试工作。JUnit的使用很简单,只需要在方法上加上下面是一个使用JUint小栗子。在这个例子中,我们创建了一个

相信大部分新手在测试程序的时候都喜欢在方法中使用 System.out.println() 方法直接把结果打印出来,看结果是否符合预期。这种方法在测试代码量很小、逻辑简单的程序时很方便。但日常工作中的项目中的代码量大、逻辑复杂,如果还是在方法中使用 System.out.println() 来测试,只是输出结果就令人眼花缭乱。这时候我们就希望有一个 工具 是我们更加方便的在复杂的项目中进行测试。JUnit就是这样一个工具。

JUnit是一个 Java 语言的单元测试框架。它不仅可以根据测试数据来验证程序的正确性,还将测试代码与工程代码分离,此外它还可以进行批量测试程序,极大的方便了测试工作。JUnit的使用很简单,只需要在方法上加上 @Test 注解,JUint就可以识别到这个测试方法。

例子

下面是一个使用JUint小栗子。在这个例子中,我们创建了一个 Calculator 类和一个 CalculatorTest 类。 Calculator 类中实现了两个简单的方法: add()sub() ,其中 add() 方法的逻辑是正确的,其返回值是两个参数之和; sub() 方法的逻辑是错误的,返回值是也是两个参数之和。 CalculatorTest 类也有两个方法: addTest()subTest() 。其中 addTest() 用来测试Calculator类中的add方法, subTest() 方法用来测试 Calculator 类中的 sub() 方法。

Step.1 在IDEA中创建一个Maven工程

Step.2 在pom.xml文件中添加JUnit的依赖,这样我们就可以使用JUint啦。这里使用最新版的JUnit。

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.5.0-M1</version>
    <scope>test</scope>
</dependency>
复制代码

Step.3 编写 Calculator 类。

package com.junit;

public class Calculator {

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

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

}
复制代码

Step.4 编写 CalculatorTest 测试类。

我们将使用 CalculatorTest 类测试 Calculator 类的正确性。 CalculatorTest 类中有两个方法: addTest()subTest() ,它们都需要使用 @Test 解来注明这是一个测试方法。这两个方法的逻辑大致相同,都是先创建一个 Calculator 类的对象,调用各自要测试的方法,最后使用 Assertions.assertEquals() 来让JUnit判断程序是否正确。 Assertions 是JUnit提供的用来验证程序运行结果的类,这里我们使用的 Assertions.assertEquals() 方法有两个参数,第一个参数是预期值,第二个参数是程序的运行结果,调用 Assertions.assertEquals() 方法就可以让JUnit比较预期值和程序运行结果,以验证程序的正确性。 Assertions 中提供了很多 Assertions.assertEquals() 方法的重载方法来比较不同类型的数据,以便于使用。

package com.junit;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class CalculatorTest {

    @Test
    public void addTest() {
        System.out.println("execute addTest");
        Calculator calculator = new Calculator();
        int result = calculator.add(1, 3);
        Assertions.assertEquals(4, result);
    }

    @Test
    public void subTest() {
        System.out.println("execute subTest");
        Calculator calculator = new Calculator();
        int result = calculator.add(1, 3);
        Assertions.assertEquals(2, result);
    }

}
复制代码

Step.5 测试结果

CalculatorTest类在IDEA的显示如下图所示,我们可以点击方法左边的按钮运行单个测试方法,也可以点击类名左边的按钮运行测试类中的所有测试方法。

JUnit使用入门
我们先试下点击方法左边的按钮运行进行测试。因为 Caluculator 类中的 add()

方法逻辑是正确的所以测试结果是正确的,在IDEA中的运行结果如下图所示。

JUnit使用入门

从上图中我们可以很直观的看到,当测试通过的时候IDEA的运行结果栏会有绿色的对号。那么当测试不通过过的时候会怎样呢?接下来,我们类名左边的按钮运行测试类中的所有测试方法。

JUnit使用入门
从上图中可以看出两个测试方法都被调用了。由于 Calculator 类中的 sub()

方法的逻辑是错误的,所以不会通过测试。从上图也可以看出IDEA在输出栏中报错了,并打印出期望值是2,实际运行结果是4的错误。

@BeforeAll @AfterAll @BeforeEach @AfterEach 注解的使用

有些时候我们需要在测试方法之前和之后做一些工作,例如打开和释放资源。JUnit提供了一组注解来帮助我们实现这类操作。

@BeforeAll 注解的方法会在测试类的所有测试方法(包括被 @BeforeEach 注解的方法)执行之前执行。使用 @BeforeAll 注释的方法必须为 static 方法

@AfterAll 会在测试类的所有测试方法(包括被 @BeforeEach 注解的方法)执行之前执行。使用 @AfterAll 注释的方法必须为 static 方法

@BeforeEach 会在测试类的所有测试方法(除了被 @BeforeAll 注解的方法)执行之前执行。

@AfterEach 会在测试类的所有测试方法(除了被 @AfterAll 注解的方法)执行之后执行。

为了进一步了解这几个注解的使用,我们在 CalculatorTest 类中添加这几个注解。

package com.junit;

import org.junit.jupiter.api.*;

public class CalculatorTest {

    @BeforeAll
    public static void beforeAll() {
        System.out.println("beforeAll");
    }

    @BeforeEach
    public void beforeEach() {
        System.out.println("beforeEach");
    }

    @AfterAll
    public static void afterAll() {
        System.out.println("afterAll");
    }

    @AfterEach
    public void afterEach() {
        System.out.println("afterEach");
    }

    @Test
    public void addTest() {
        System.out.println("execute addTest");
        Calculator calculator = new Calculator();
        int result = calculator.add(1, 3);
        Assertions.assertEquals(4, result);
    }

    @Test
    public void subTest() {
        System.out.println("execute subTest");
        Calculator calculator = new Calculator();
        int result = calculator.add(1, 3);
        Assertions.assertEquals(2, result);
    }

}
复制代码

运行结果如下图所示

JUnit使用入门
从运行结果中可以看出,使用 @BeforeAll 注解的方法在所有测试方法被执行之前执行,使用 @AfterAll 注解的方法在所有测试方法被执行之后执行,它们都只被执行了一次。使用 @BeforeEach 在测试类的除了被 @BeforeAll 注解的方法的所有测试方法执行之前被执行。使用 @AfterEach 会在测试类的除了被 @AfterAll

注解的方法所有测试方法执行之后执行,它们都被执行了两次。

JUnit使用入门的介绍到此结束,对JUnit有兴趣的同学可以进行更深入的学习。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

用户体验草图设计

用户体验草图设计

比尔·巴克斯顿(Bill Buxton) / 黄峰 / 电子工业出版社 / 2009-11 / 168.00元

《用户体验草图设计:正确地设计,设计得正确(全彩)》:比尔·盖茨亲笔推荐版 人因国际、百度、华为、微软、腾讯用户体验部门联合推荐!一起来看看 《用户体验草图设计》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具