Java—junit单元测试

jar包下载:
junit5icon-default.png?t=N7T8https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.jar
engineicon-default.png?t=N7T8https://repo1.maven.org/maven2/org/junit/platform/junit-platform-engine/1.10.2/junit-platform-engine-1.10.2.jar
commonsicon-default.png?t=N7T8https://repo1.maven.org/maven2/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar

介绍

JUnit 5是Java编程语言中的一个单元测试框架,它提供了一组API和注解,用于编写和运行测试。以下是JUnit 5的主要特点:

  1. 支持多种扩展模型:JUnit 5采用了插件架构,开发人员可以通过不同的扩展模型来定制测试框架,以满足其特定需求。

  2. 改进的注解支持:JUnit 5提供了一系列新的注解,如@Test、@BeforeEach和@AfterEach等,这些注解使得编写测试更加简单和直观。

  3. 丰富的断言支持:JUnit 5提供了许多新的断言方法,如assertAll()、assertTimeout()和assertThrows()等,这些方法允许开发人员更方便地编写测试用例。

  4. 支持并行测试:JUnit 5允许在测试执行时并行运行测试用例,从而提高测试执行速度。

  5. 改进的测试生命周期管理:JUnit 5提供了更细粒度的测试生命周期管理,使得在测试执行过程中可以做更多的控制和定制。

以下是JUnit 5中常见的几个注解和断言方法的详细介绍:

  1. 注解

  • @Test: 表示Junit测试用例的标识注解,用于标记测试方法。
  • @BeforeEach: 表示在每个测试方法执行前应该执行的代码块。可以用来初始化测试环境。
  • @AfterEach: 表示在每个测试方法执行后应该执行的代码块。可以用来清理测试环境。
  • @BeforeAll: 表示在所有测试方法执行前应该执行的代码块。只会在类加载时执行一次。
  • @AfterAll: 表示在所有测试方法执行后应该执行的代码块。只会在所有测试方法执行完毕后执行一次。
  • @DisplayName: 用于定义测试用例的显示名称。
  • @Disabled: 表示将测试方法禁用,不会执行该测试用例。
  1. 断言方法

  • assertEquals(expected, actual): 验证预期值与实际值是否相等。
  • assertNotEquals(unexpected, actual): 验证预期值与实际值是否不相等。
  • assertTrue(boolean condition): 验证条件是否为真。
  • assertFalse(boolean condition): 验证条件是否为假。
  • assertNull(Object object): 验证对象是否为空。
  • assertNotNull(Object object): 验证对象是否不为空。
  • assertArrayEquals(expectedArray, actualArray): 验证两个数组是否相等。
  • assertThrows(Class expectedType, Executable executable): 验证指定类型的异常是否被抛出。
  • assertTimeout(Duration timeout, Executable executable): 验证方法执行是否超时。
  • assertAll(Executable... executables): 验证多个断言是否都成功执行。

项目中使用

编写代码

待测试代码:

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

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

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

    public static double divide(double a, double b) {
        if (b == 0) {
            throw new IllegalArgumentException("Divisor cannot be zero");
        }
        return a / b;
    }
}

测试用例:

import org.junit.jupiter.api.*;

public class MathTest {

    @BeforeAll
    public static void beforeAll() {
        System.out.println("单元测试开始啦!");
    }

    @BeforeEach
    public void beforeEach() {
        System.out.println("方法执行开始");
    }

    @AfterEach
    public void afterEach() {
        System.out.println("方法执行结束");
    }

    @AfterAll
    public static void afterAll() {
        System.out.println("单元测试结束");
    }

    @Test
    public void testAddition() {
        System.out.println("执行加法了");
        int result = Math.add(2, 3);
        // 断言 Assertions   asserEquals(期待结果,方法执行结果);
        Assertions.assertEquals(5, result);
    }

    @Test
    public void testSubtraction() {
        System.out.println("执行减法了");
        int result = Math.subtract(5, 3);
        Assertions.assertEquals(2, result);
    }

    @Test
    public void testMultiplication() {
        System.out.println("执行乘法了");
        int result = Math.multiply(4, 5);
        Assertions.assertEquals(20, result);
    }

    @Test
    public void testDivision() {
        System.out.println("执行除法了");
        double result = Math.divide(10, 2);
        Assertions.assertEquals(5.0, result);

        // 测试除以0的情况
        Assertions.assertThrows(ArithmeticException.class, () -> {
            Math.divide(10, 0);
        });
    }
}

测试结果

解决无法输入的问题

添加:

-Deditable.java.test.console=true

重启IDEA!!

测试

    @Test
    public void testScan() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("你输入的是:" + scanner.next());
    }

  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值