前言
在创建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包含了三个模块:
- JUnit Jupiter:这是用于编写测试的模块,提供了新的注解和功能。
- JUnit Platform:它是一个运行测试的平台,可以支持多个测试引擎。
- JUnit Vintage:这是为了向后兼容junit3和junit4的测试代码。
这里就使用用junit5来进行单元测试,在此之前我们先讲断言。
断言(Assertions)
断言是测试代码的核心部分,用于验证被测代码的行为是否符合预期。junit5的断言类位于 org.junit.jupiter.api.Assertions 包中,主要断言方法包括:
- assertEquals:断言两个值相等。
- assertNotEquals:断言两个值不相等。
- assertTrue:断言条件为 true。
- assertFalse:断言条件为 false。
- assertNull:断言对象为 null。
- assertNotNull:断言对象不为 null。
- assertThrows:断言抛出指定异常。
- assertTimeout:断言在规定时间内执行完成。
- fail:强制使测试失败。
- 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可以快速的开发自己的测试单元。