JUnit单元测试

JUnit单元测试

1、单元测试类

单元测试类名:XxxTest

2、单元测试方法

  1. 单元测试方法需要用@Test注解标注。
  2. 单元测试方法返回类型必须是void
  3. 单元测试方法形参个数为0.
  4. 单元测试方法名约定规范为:testXxx。
  5. 在JUnit5中,方法名可以不用声明为public。

3、期望值、实际值

期望值(Expected Value):
期望值是指在执行单元测试时,开发者预期被测试代码会产生的结果。
在编写单元测试时,通常会先确定要测试的功能或情况,并明确预期的输出、状态或行为。
期望值可以是一个具体的数值、对象、状态等,取决于正在测试的功能。在测试方法中,开发者会使用断言方法来验证实际结果是否与期望值一致。
实际值(Actual Value):
实际值是指被测试代码在执行单元测试时产生的实际结果。
实际值是通过执行被测试的代码来获取的,它反映了代码在给定输入下的真实行为。
在单元测试方法中,开发者会调用被测试的方法或功能,并获取其输出、状态或行为,然后与期望值进行比较。

4、常见注解

@BeforeAll@AfterAll@BeforeEach@AfterEach 是JUnit 5中用于执行测试前后操作的生命周期方法。它们提供了一种方便的方式来执行一些公共的初始化和清理工作,以确保测试的独立性和可重复性。

  1. @BeforeAll

    • @BeforeAll 注解用于指定在运行测试类中的所有测试方法之前执行的方法。
    • 该注解标记的方法必须是静态的,且必须返回void
    • 通常用于执行一次性的全局初始化工作,例如创建数据库连接、启动服务器等。
    • 在一个测试类中,@BeforeAll 注解标记的方法只会执行一次,并且在所有测试方法之前执行。
      1
      2
      3
      4
      @BeforeAll
      public static void before(){
      System.out.println("开始执行单元测试了!");
      }
  2. @AfterAll

    • @AfterAll 注解用于指定在运行测试类中的所有测试方法之后执行的方法。
    • 该注解标记的方法必须是静态的,且必须返回void
    • 通常用于执行一次性的全局清理工作,例如关闭数据库连接、停止服务器等。
    • 在一个测试类中,@AfterAll 注解标记的方法只会执行一次,并且在所有测试方法之后执行。
      1
      2
      3
      4
      @AfterAll
      public static void after(){
      System.out.println("单元测试执行完毕!");
      }
  3. @BeforeEach

    • @BeforeEach 注解用于指定在运行每个测试方法之前执行的方法。
    • 该注解标记的方法不需要是静态的,但必须返回void
    • 通常用于执行每个测试方法之前的初始化工作,例如创建临时对象、设置测试数据等。
    • 在一个测试类中,每个@BeforeEach 注解标记的方法都会在对应的测试方法之前执行。
      1
      2
      3
      4
      @BeforeEach
      public void beforeEach(){
      System.out.println("单元测试方法开始执行");
      }
  4. @AfterEach

    • @AfterEach 注解用于指定在运行每个测试方法之后执行的方法。
    • 该注解标记的方法不需要是静态的,但必须返回void
    • 通常用于执行每个测试方法之后的清理工作,例如释放资源、恢复状态等。
    • 在一个测试类中,每个@AfterEach 注解标记的方法都会在对应的测试方法之后执行。
      1
      2
      3
      4
      @AfterEach
      public void afterEach(){
      System.out.println("单元测试方法执行结束");
      }

5、单元测试断言

在单元测试中,断言是一种用于验证代码行为的机制。
它允许开发者在测试代码中声明预期结果,并与实际结果进行比较,从而验证代码是否按预期工作。
如果预期结果与实际结果相符,则断言通过,否则测试失败。

在JUnit中,常用的断言方法包括:

  1. **assertEquals(expected, actual)**:断言两个对象是否相等。如果预期值(expected)等于实际值(actual),则断言通过。

  2. **assertTrue(condition)**:断言给定的条件是否为真。如果条件为真,则断言通过。

  3. **assertFalse(condition)**:断言给定的条件是否为假。如果条件为假,则断言通过。

  4. **assertNull(object)**:断言给定的对象是否为null。如果对象为null,则断言通过。

  5. **assertNotNull(object)**:断言给定的对象是否不为null。如果对象不为null,则断言通过。

  6. **assertArrayEquals(expectedArray, actualArray)**:断言两个数组是否相等。如果预期数组(expectedArray)与实际数组(actualArray)相等,则断言通过。

  7. **assertSame(expected, actual)**:断言两个对象引用是否指向同一个对象。如果预期对象(expected)和实际对象(actual)是同一个对象,则断言通过。

  8. **assertNotSame(expected, actual)**:断言两个对象引用是否指向不同的对象。如果预期对象(expected)和实际对象(actual)不是同一个对象,则断言通过。

  9. **assertThrows(expectedException, executable)**:断言给定的代码块是否抛出了预期的异常。如果代码块抛出了预期的异常,则断言通过。