如何使用junit5构建单元测试

2024-09-19 23:59:06 浏览数 (4)

前言

在创建maven项目的时候,在src目录下会有main和test两个目录,然后pom文件中会有junit的依赖。

通常,我将pom中的junit依赖会移除,在编译时test目录下的java文件就会因为找不到依赖而报错,所以我都是直接将test目录删除。如果真的需要使用junit来进行单元测试的话,那该怎么办,所以今天就来探究一下如何使用junit。

junit5

根据不同maven的archetype创建的项目,使用的junit版本也不一样。我用家里的电脑创建的maven项目引用的就是junit4。

代码语言:xml复制
<dependency> 
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
</dependency>

笔记本创建的使用的就是junit5的依赖。

代码语言:xml复制
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <scope>test</scope>
</dependency>
<!-- Optionally: parameterized tests support -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <scope>test</scope>
</dependency>

junit4是一个经典的单元测试框架,在许多项目中被广泛使用。它的核心包是 junit,并且大多数类和注解都在 org.junit 包中。

junit5是junit框架的最新版本,其核心包是 org.junit.jupiter。junit5的设计旨在解决 junit4的一些局限,并提供了更多的灵活性和功能。junit5包含了三个模块:

  1. JUnit Jupiter:这是用于编写测试的模块,提供了新的注解和功能。
  2. JUnit Platform:它是一个运行测试的平台,可以支持多个测试引擎。
  3. JUnit Vintage:这是为了向后兼容junit3和junit4的测试代码。

这里就使用用junit5来进行单元测试,在此之前我们先讲断言。

断言(Assertions)

断言是测试代码的核心部分,用于验证被测代码的行为是否符合预期。junit5的断言类位于 org.junit.jupiter.api.Assertions 包中,主要断言方法包括:

  1. assertEquals:断言两个值相等。
  2. assertNotEquals:断言两个值不相等。
  3. assertTrue:断言条件为 true。
  4. assertFalse:断言条件为 false。
  5. assertNull:断言对象为 null。
  6. assertNotNull:断言对象不为 null。
  7. assertThrows:断言抛出指定异常。
  8. assertTimeout:断言在规定时间内执行完成。
  9. fail:强制使测试失败。
  10. assertArrayEquals:用于比较两个数组是否相等。

了解了这些断言之后,我们就可以使用junit来编写测试单元。

单元测试

1. @Test

@Test用来标记测试方法,junit5会自动识别和执行这些方法。

代码语言:java复制
@Test
public void shouldAnswerWithTrue() {
    assertEquals(52, 2   3);
}

在上面代码中,shouldAnswerWithTrue就会被标记为测试方法,在IDEA中会自动识别被Test注解的方法,在右侧会有运行按钮,可以直接运行

在断言中,2 3显然不等于52,所以断言就会失败,并打印出错误信息。

2. @BeforeEach

@BeforeEach 标注的方法会在每个测试方法执行之前执行,用于设置测试前的初始化工作。

3. @AfterEach

@AfterEach 标注的方法会在每个测试方法执行之后执行,通常用于清理或释放资源。

4. @BeforeAll

@BeforeAll 标注的方法会在所有测试方法之前只执行一次,通常用于全局设置。该方法必须是 static。

5. @AfterAll

@AfterAll 标注的方法

会在所有测试方法执行完毕后只执行一次,通常用于全局清理工作。该方法也必须是 static。

6. @Disabled

@Disabled 用于暂时禁用测试方法或类。被标记的测试方法或类不会被执行

7. @ParameterizedTest

@ParameterizedTest 用于标记参数化测试方法,允许使用不同的数据多次运行相同的测试方法。配合数据提供者注解(如 @ValueSource、@CsvSource 等)使用

代码语言:java复制
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

class MyParameterizedTest {

    @ParameterizedTest
    @ValueSource(strings = {"apple", "banana", "orange"})
    void testWithParameters(String fruit) {
        // 测试代码,使用不同的 fruit 参数执行
    }
}

结语

本文主要讲了junit5中常用的断言和注解,使用juint5可以快速的开发自己的测试单元。

0 人点赞