2025年Junit5教程(junit5 runwith)

Junit5教程(junit5 runwith)本文章出自 码同学软件测试 码同学公众号 自动化软件测试 领取资料可加 magetest 码同学抖音号 小码哥聊软件测试 介绍 单元测试是软件开发流程中的重要环节 在软件工程理论里 越早发现 bug 修复的成本越低 单元测试就属于测试人员 开发人员提前介入测试的一种手段 在代码还没正式提测前 提前对函数 类进行测试 但是很多时候往往因为项目周期比较紧张 从而忽略了单元测试

大家好,我是讯享网,很高兴认识大家。



本文章出自【码同学软件测试】

码同学公众号:自动化软件测试,领取资料可加:magetest

码同学抖音号:小码哥聊软件测试

  介绍

单元测试是软件开发流程中的重要环节,在软件工程理论里,越早发现bug,修复的成本越低。单元测试就属于测试人员/开发人员提前介入测试的一种手段,在代码还没正式提测前,提前对函数、类进行测试。但是很多时候往往因为项目周期比较紧张,从而忽略了单元测试,这样很多bug可能要到提测后,甚至就一直隐藏在代码中无法被发现。这就相当于在代码中埋藏了定时炸弹。因此单元测试是十分有必要的,它是保障代码执行的重要手段。

在Java领域里,最知名的单元测试框架就是Junit了。 JUnit 有着较长的发展历史和不断演进的丰富功能,备受大多数 Java 开发者的青睐。

最新的Junit版本是Junit5,这个版本可以说是 JUnit 单元测试框架的一次重大升级,首先需要 Java 8 以上的运行环境,虽然在旧版本 JDK 也能编译运行,但要完全使用 JUnit 5 功能, JDK 8 环境是必不可少的。

Junit5的主要特性有:

1. 提供全新的断言和测试注解,支持测试类内嵌

2. 更丰富的测试方式:支持动态测试,重复测试,参数化测试等

3. 实现了模块化,让测试执行和测试发现等不同模块解耦,减少依赖

4. 提供对 Java 8 的支持,如 Lambda 表达式,Sream API等

接下来,我们来学习下Junit的一些基本使用。

在工程中引入Junit依赖

<dependency>

  <groupId>org.junit.jupiter</groupId>

  <artifactId>junit-jupiter-engine</artifactId>

  <version>5.5.2</version>

  <scope>test</scope>

</dependency>

先写一个简单的测试类

@DisplayName(1个测试类)

public class DemoTest {

    @BeforeAll
    public static void init() {
        System.out.println(初始化数据);
    }

 @AfterAll
    public static void end() {
        System.out.println(清理数据);
    }


讯享网

    @BeforeEach
    public void setup() {
        System.out.println(当前测试方法开始);
    }

    @AfterEach
    public void tearDown() {
        System.out.println(当前测试方法结束);
    }

    @DisplayName(1个测试)
    @Test
    void test1() {
        System.out.println(1个测试开始测试);
    }

@DisplayName(2个测试)
    @Test
    void test2() {
        System.out.println(2个测试开始测试);
    }

}

几个常用的注解解释:

@DisplayName:测试类在测试报告中的名称,可以加在类上,也可以加在方法上

@BeforeAll和@AfterAll:它们定义了整个测试类在开始前以及结束时的操作,只能修饰静态方法,主要用于在测试过程中所需要的全局数据和外部资源的初始化和清理

@BeforeEach和@AfterEach:它们所标注的方法会在每个测试用例方法开始前和结束时执行,主要是负责该测试用例所需要的运行环境的准备和销毁。

在idea中运行测试类,看到控制台打印信息如下:

 

可以看到,在整个测试过程中,init函数和end函数只执行了一次,setup和tearDown函数在每次运行test1、test2函数前后分别执行。

  重复性测试

在函数上添加@RepeatedTest注解可以指定重复执行的次数

@DisplayName(我的第三个测试-断言)

@RepeatedTest(3) void test3() {
    System. out.println( 我的第三个测试开始测试 );     Assertions.assertEquals(1, 1);
}

执行代码,可以看到test3函数连续执行了3次

 

在Junit5中,提供了新的断言类Assertions,常见的api:

assertEquals:判断两个数据是否相等

assertNotEquals:判断两个数据是否不相等

assertNotNull:判断对象是否为空

示例:

@DisplayName(4个测试)

@Test
void  test4() {
    System.out.println( 4 个测试开始测试 );
    Assertions.assertEquals(1, 2);
}

执行测试,可以看到case执行失败

 

免费领取码同学软件测试课程笔记+超多学习资料+完整视频+面试题,可加微信:magetest

在Junit5中,对参数化提供了非常丰富的支持,比如固定数组、csv文件等。

首先在项目中添加参数化依赖包

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.5.2</version>
    <scope>test</scope>

</dependency>

  数组化参数

在测试函数上添加参数化相关的注解即可,如:

@DisplayName(5个测试-参数化测试-数字)

@ParameterizedTest
@ValueSource(ints = {1,2,3}) void test5( int num) {
    System. out.println( 当前数字为: + num);
}

注解解释:

@ParameterizedTest:运行参数化测试

@ValueSource:参数来源为数组,支持各种基本数据类型的数组,如整型数组ints,字符串数组strings,chars等

按照上述配置,test5函数会运行3次,每次会把数组中的元素传入num值

 

 

  CSV文件参数化

Junit支持将参数数据写入到一个csv文件中,然后在测试用例中读取csv文件中的数据。

在项目resource目录下新建一个csv文件,内部保存用户名和token的对应数据

@DisplayName(8个测试-参数化测试-csv文件)

@ParameterizedTest
@CsvFileSource(resources =  “/output.csv”) void test8(String name, String token) {
    System.out.println( 当前姓名为: ” + name +  ,当前 token 为: ” + token);
}

@CsvFileSource:指定csv文件的路径

在函数名上定义csv文件中每列对应的参数名,这样csv文件中有几行数据,test8函数就会运行几次,并且每次都会传入对应列的数据。

 

以上就是Junit常用的一些使用场景,更多Junit的使用方法,可以去Junit官网查看相关的示例。

小讯
上一篇 2025-06-07 10:18
下一篇 2025-04-17 12:03

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/197561.html