13.5 Junit5(针对Java的单元测试框架)

news2024/10/6 12:20:01

一.Junit是针对Java的单元测试框架

二.注解

1.@Test: 当前的方法是一个测试用例. 

a.去maven中央仓库下载依赖(JUnit Jupiter API)

 <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

b.测试方法可以用public修饰,也可以不修饰,不能用private修饰.

2.@Disabled: 使测试用例失效

3.@BeforeAll,@AfterAll, @BeforeEach, @AfterEach :都要写成静态方法.

a)@BeforeAll: 在所有测试方法执行之前执行的方法.

这里执行的一些任务,比如创建驱动, 打开浏览器.

b)@AfterAll: 在所有测试方法执行之后执行的方法.

这里执行的一些任务,比如关闭浏览器.

c)@BeforeEach: 在每个测试方法执行之前执行的方法.

d)@AfterEach: 在每个测试方法执行之后执行的方法.

注意: 如果有n个测试方法,@BeforeAll和@AfterAll跑1次,@BeforeEach,和@AfterEach跑5次.

4.代码

import org.junit.jupiter.api.*;

public class Test_junit {
    @Test
    public void test1() {
        System.out.println(111);
    }
    @Test
    public void test2() {
        System.out.println(222);
    }
    // 使测试用例失效
    @Disabled
    public void test3() {
        System.out.println(333);
    }
    @BeforeAll
    public static void setUp() {
        System.out.println("BeforeAll");
    }
    @AfterAll
    public static void tearDown() {
        System.out.println("AfterAll");
    }
    @BeforeEach
    public void beforeEach() {
        System.out.println("BeforeEach");
    }
    @AfterEach
    public void afterEach() {
        System.out.println("AfterEach");
    }
}

结果: 

三.参数化: 测试方法传参.

去maven中央仓库下载依赖(JUnit Jupiter Params)

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

1.单参数

a.代码

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class Test_junit2 {
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3})
    void test1(int x) {
        System.out.println(x);
    }
}

b.结果

注意: 有n个参数,就会运行n次方法.

2.CSV获取参数(支持多种形式的参数类型的多种参数)

a.代码

方法1:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;

public class Test_junit2 {
    @ParameterizedTest
    @CsvFileSource(resources =  "test1.csv")
    void test1(String str) {
        System.out.println(str);
    }
}

还要在resources目录下创建文件test.csv 

方法2:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;

import java.util.stream.Stream;

public class Test_junit2 {
    @ParameterizedTest
    @CsvSource({"高数1, 英语1, 政治1", "hello1, world2, hw2"})
    void test3(String str1, String str2, String str3) {
        System.out.println(str1 + " " + str2 + " " + str3);
    }
}

b.结果

注意: 在.csv文件有n行参数,就会运行n次方法, 传入空字符串,直接使用单引号.

3.方法获取参数

a.代码

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

public class Test_junit2 {
    @ParameterizedTest
    @MethodSource("Generator")
    void test2(int i, String str) {
        System.out.println(i + " " + str);
    }
    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(1, "hello"),
                         Arguments.arguments(2, "world")
                        );
    }
}

b.结果

4.测试用例指定执行顺序

a.代码

import org.junit.jupiter.api.*;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Test_junit {
    @Order(1)
    @Test
    public void test1() {
        System.out.println(111);
    }
    @Order(3)
    @Test
    public void test2() {
        System.out.println(222);
    }
    // 使测试用例失效
    @Order(2)
    @Test
    public void test3() {
        System.out.println(333);
    }

}

b.结果

1)设置顺序前:

2)设置顺序后:

c. 随机的执行方式: 在类上加注释:

@TestMethodOrder(MethodOrderer.Random.class)

5.断言(assert)

1)Assertions.assertEquals( , );

2)Assertions.assertNotEquals( ,  );

3)Assertions.assertNull( str);

4)Assertions.assertNotNull(str);

四.测试套件

传入依赖(suite, engine) 

<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite</artifactId>
    <version>1.9.1</version>
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>


1.通过class运行测试用例

a.代码

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({Test_junit.class, Test_junit2.class})
public class Test_suite {


}

b.结果

 

2.通过包运行测试用例

a.代码

package pack1;

import org.junit.jupiter.api.Test;

public class Test_pack1 {
    @Test
    public void t_p1() {
        System.out.println("Test_pack1");
    }
}
package pack2;

import org.junit.jupiter.api.Test;

public class Test_pack2 {
        @Test
        public void t_p2() {
            System.out.println("Test_pack2");
        }
}
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectPackages({"pack1", "pack2"})
public class Test_suite {


}

b.结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业/公司文件加密软件|办公文件、文档、图纸加密|源代码透明加密保护防止外泄。dlp数据泄露防护系统

天锐绿盾是一家专业的数据安全保护解决方案提供商&#xff0c;其产品包括文件加密、图纸加密、源代码加密、音视频加密等智能透明加密保护。 PC访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天锐绿盾的优势和特点…

利用Pholcus框架提取小红书数据的案例分析

前言 在当今互联网时代&#xff0c;数据的获取和分析变得越来越重要。爬虫技术作为一种数据采集的方法&#xff0c;被广泛涉及各个领域。在本文中&#xff0c;我们将介绍如何使用Python Spark语言和Pholcus框架来实现一本小红书数据爬虫的案例分析。 开发简述 Go语言作为一种…

20231026_java基础_设计模式

20231026_java基础 设计模式概念分类 单例模式概念代码实现饿汉式懒汉式对比差异 总结 设计模式 概念 分类 归纳 运用 单例模式 概念 代码实现 饿汉式 测试:获取实例对象,并测试有多个该对象时,他们是否相同 懒汉式 对比差异 代码实现中 饿 懒 过程中 并发时 总结 111

【uniapp】富文本

1、富文本显示&#xff0c;只显示文字&#xff0c;其余html不显示 功能&#xff1a;红框处其实是一个富文本&#xff0c;有图片之类的。但是现在不想根据html显示&#xff0c;只显示文字。 直接上代码 //内容显示 <view>{{item.fhArticleVo.content}}</view> // …

浅谈开口互感器在越南美的工业云系统中的应用

摘 要&#xff1a;分析低压开口式电流互感器的原理&#xff0c;结合工程实例分析开口电流互感器在低压配电系统中&#xff0c;主要是改造项目中的应用及施工细节&#xff0c;为用户快速实现智能配电提供解决方案&#xff0c;该方案具有成本低、投资少、安装接线简便等优点&…

浪潮云海首席科学家张东:面向一云多芯的系统设计方法

近日&#xff0c;浪潮云海首席科学家张东、资深研究员亓开元在《中国计算机学会通讯》2023年第9期发表论文《面向一云多芯的系统设计方法》&#xff0c;深入分析一云多芯背后的关键挑战问题&#xff0c;阐释面向一云多芯的系统设计方法和关键技术路线&#xff0c;并在此基础上&…

mysql查看插入记录与查看mysql实时查询和插入速度

我真正关心的数据 比如一秒钟到底能插入多少行数据?慢查询有多少? 慢是一个相对概念,慢的绝对值时间是可以设置的,例如我设置long_query_time为10秒,那么但凡超过10秒的查询都可以认为是慢查询查询操作的超时时间mysql中系统变量什么意思?怎么查看系统变量? show varia…

用户登录后首页不显示数据

登录前&#xff1a; 登录后&#xff1a; 用户登录后&#xff0c;首页的图标按键、

python excel接口自动化测试框架

前言 前些天写了pytestyamlallure接口自动化测试框架这篇文章。 今天采用Excel继续写一个接口自动化测试框架。 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件&#xff0c;得到测试信息&#xff0c;然后通过封装的requests方法&#xff0c…

实用篇-认识微服务

一、服务架构演变 1. 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署 单体架构的优点&#xff1a; 架构简单部署成本低 单体架构的缺点&#xff1a; 耦合度高 2. 分布式架构 分布式架构&#xff1a; 根据业务功能对系…

nvm安装与使用详解(Window11)

文章目录 前言一、卸载 node.js卸载清理缓存&#xff08;有的不执行此步骤后面会报错&#xff09; 二、下载 nvmnvm 下载点开链接之后如图鼠标鼓轮往下滑下载完成后解压打开检查是否安装成功 三、安装多个 node.js 版本nvm 常用命令安装 nodenvm使用 四、删除 nvm删除文件夹删除…

10月26日星期四今日早报简报微语报早读

10月26日星期四&#xff0c;农历九月十二&#xff0c;早报微语早读分享。 1、神十七瞄准10月26日11时14分发射&#xff0c;汤洪波唐胜杰江新林执飞&#xff1b; 2、交通运输部&#xff1a;2024年春节除夕至初八小客车免通行费&#xff1b; 3、6个经济大省“三季报”&#xf…

Unable to find GatewayFilterFactory with name TokenRelay

目录 问题分析解决方案参考文档开源项目微服务商城项目前后端分离项目 问题分析 Spring Cloud Gateway 网关作为代理资源服务器&#xff0c;需要将 JWT 传递给下游资源服务器&#xff0c;下面是网关的配置 spring:cloud:gateway:discovery:locator:enabled: true # 启用服务发…

电力系统保卫战:迅软DSE加密系统的关键角色

随着信息技术的高速发展和广泛应用,数据作为业务的重要支撑需要精细和可控。电力电网行业信息系统作为国家关键重要基础设施,在数据方面的安全防护能力,已成为电力电网业务安全稳健运行的重中之重&#xff0c;数据安全所面临的危险已渗透到电力电网企业生产、经营的各个方面&am…

ATFX汇市:欧央行利率决议来袭,能够逆转欧元跌势吗?

ATFX汇市&#xff1a;今日20:15&#xff0c;欧央行公布10月利率决议结果&#xff0c;金融机构普遍预期欧央行将按兵不动。至10月26日欧洲央行主要再融资利率的前值为4.5%&#xff0c;预期值持平。当日20:45&#xff0c;欧洲央行行长拉加德召开货币政策新闻发布会&#xff0c;重…

美国访问学者申请签证的五点建议

当你计划成为一名美国访问学者时&#xff0c;申请签证是其中一个必要的步骤。签证申请程序可能会有一些复杂&#xff0c;但如果你遵循以下五点建议&#xff0c;你将更有可能成功获得签证&#xff0c;顺利开始你的学者之旅。 1.早做准备&#xff0c;提前规划&#xff1a;在申请签…

2023探寻室内设计的新趋势与即将流逝的旧潮流

起初认为&#xff0c;”室内设计趋势 “可能是一个矛盾的术语。家具、纺织品、艺术品和墙面装饰都太繁琐、太昂贵、太持久&#xff0c;不可能经常更新。 然而&#xff0c;钟摆确实在摆动&#xff0c;尽管摆动的时间长达数年或数十年&#xff1a;20 世纪 70 年代铺着长毛地毯的波…

几个常用的nosql数据库的操作方式

dynamoDB 键 partition key&#xff1a;分区键 定义&#xff1a;分区键是用于分布数据存储的主键&#xff0c;每个项&#xff08;Item&#xff09;在表中都必须有一个唯一的分区键值。 特点&#xff1a; 唯一性&#xff1a;每个分区键值在表中必须是唯一的&#xff0c;这是因为…

檢測項目簡體字

某些項目可能要求代碼中不允許使用簡體字 安裝stcheck檢查 yarn add stcheck --dev在項目根目錄創建 st.config.json 文件 {"patterns": ["./**/*.(ts|js|tsx|jsx|vue|html)","!**/node_modules/**","!.git/**"],"gitignore&q…

可用于嵌入各种功能的STSPIN820、STSPIN830、STSPIN240、STSPIN233电机驱动器 功率 MOSFET

STSPIN电机驱动器是一系列IC&#xff0c;面向采用各种额定功率、电机类型和各种系统分区的应用。STSPIN电机驱动器可用于嵌入各种功能&#xff0c;以最高精度驱动电机。这些功能包括可减轻主机微控制器负担的高级运动轮廓生成器&#xff0c;以及全面的保护和诊断特性。 STSPIN…