前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用junit5构建单元测试

如何使用junit5构建单元测试

原创
作者头像
叫我阿柒啊
发布2024-09-19 23:59:06
1120
发布2024-09-19 23:59:06
举报
文章被收录于专栏:Java放弃之路

前言

在创建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可以快速的开发自己的测试单元。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • junit5
  • 断言(Assertions)
  • 单元测试
    • 1. @Test
      • 2. @BeforeEach
        • 3. @AfterEach
          • 4. @BeforeAll
            • 5. @AfterAll
              • 6. @Disabled
                • 7. @ParameterizedTest
                • 结语
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档