在创建maven项目的时候,在src目录下会有main和test两个目录,然后pom文件中会有junit的依赖。
通常,我将pom中的junit依赖会移除,在编译时test目录下的java文件就会因为找不到依赖而报错,所以我都是直接将test目录删除。如果真的需要使用junit来进行单元测试的话,那该怎么办,所以今天就来探究一下如何使用junit。
根据不同maven的archetype创建的项目,使用的junit版本也不一样。我用家里的电脑创建的maven项目引用的就是junit4。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
笔记本创建的使用的就是junit5的依赖。
<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包含了三个模块:
这里就使用用junit5来进行单元测试,在此之前我们先讲断言。
断言是测试代码的核心部分,用于验证被测代码的行为是否符合预期。junit5的断言类位于 org.junit.jupiter.api.Assertions 包中,主要断言方法包括:
了解了这些断言之后,我们就可以使用junit来编写测试单元。
@Test用来标记测试方法,junit5会自动识别和执行这些方法。
@Test
public void shouldAnswerWithTrue() {
assertEquals(52, 2 + 3);
}
在上面代码中,shouldAnswerWithTrue就会被标记为测试方法,在IDEA中会自动识别被Test注解的方法,在右侧会有运行按钮,可以直接运行
在断言中,2 + 3显然不等于52,所以断言就会失败,并打印出错误信息。
@BeforeEach 标注的方法会在每个测试方法执行之前执行,用于设置测试前的初始化工作。
@AfterEach 标注的方法会在每个测试方法执行之后执行,通常用于清理或释放资源。
@BeforeAll 标注的方法会在所有测试方法之前只执行一次,通常用于全局设置。该方法必须是 static。
@AfterAll 标注的方法
会在所有测试方法执行完毕后只执行一次,通常用于全局清理工作。该方法也必须是 static。
@Disabled 用于暂时禁用测试方法或类。被标记的测试方法或类不会被执行
@ParameterizedTest 用于标记参数化测试方法,允许使用不同的数据多次运行相同的测试方法。配合数据提供者注解(如 @ValueSource、@CsvSource 等)使用
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可以快速的开发自己的测试单元。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。