JUnit 简介

JUnit 是什么?

JUnit是一个Java测试框架,主要用于单元测试、集成测试,也可以用于创建自动测试。

JUnit框架是最流行的Java测试框架之一。它提供了一些功能,使编写测试变得容易,包括支持多个测试用例、断言和报告。JUnit也是多功能的,允许用各种语言编写测试。它可以用于大多数语言制作的应用程序,但特别适合于测试Java应用程序。

JUnit 使用需要引入的包?

<!--junit 单元测试需要-->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version>
</dependency>
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version>
</dependency>
<!--测试套件需要-->
<!-- 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>
</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>

JUnit 常用注解有哪些?(熟悉)

@Test

添加到方法上,表示当前的方法是一个测试用例。示例如下:

@Test
void test00() {System.out.println("test00");
}

@BeforeAll
@BeforeAll表示在当前类所有测试用例执行之前运行,方法有 static 修饰,只执行一次。示例如下:

@BeforeAll
static void setUp(){System.out.println("开始执行@BeforeAll修饰的方法");
}

@AfterAll
@AfterAll表示在当前类所有测试用例执行之后运行,方法有 static 修饰,只执行一次。示例如下:

@AfterAll
static void terDown(){System.out.println("开始执行@AfterAll修饰的方法");
}

@BeforeEach
@BeforeEach表示在每个测试方法执行前运行。

@BeforeEach
void beforeTest(){System.out.println("执行单个before");
}

@AfterEach
@AfterEach表示在每个测试方法执行后运行。

@AfterEach
void afterTest(){System.out.println("执行单个after");
}

@Disabled
作用:忽略当前的测试用例

如何控制多个测试用例的执行顺序?

使用 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)+ @Order(数字) 注解,实现执行顺序的控制。示例如下:

//按顺序执行测试用例
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
//随机执行测试用例
//@TestMethodOrder(MethodOrderer.Random.class)
public class JunitApiTest {@Test@Order(2)//第二执行void test01() {System.out.println("test01");}@Test@Order(1)//第一执行void test02() {System.out.println("test02");}
}

也可以采用随机执行的方式,使用 @TestMethodOrder(MethodOrderer.Random.class) 注解。

测试用例如何传参?(熟悉)

单参数传递

使用 @ParameterizedTest + @ValueSource() 配合传递单参数。

注意:这两个注解不能和@Test一起使用,并且只能传一种类型的参数

示例如下:

//下面两个注解不能和@Test一起使用,并且只能传一种类型的参数
@ParameterizedTest
@ValueSource(strings = {"你","我","他"})//传了3个参数,测试用例将执行3次。
void test03(String str){System.out.println(str);
}

多参数传递
参数直传:使用 @ParameterizedTest + @CsvSource() 配合,示例如下:

@ParameterizedTest
//可以传入多种类型的参数
@CsvSource({"我今年,18,true","你今年,17,false"})
void test04(String str,int num,Boolean flag){System.out.println(str+" "+num + flag);
}

文件传递:使用 @ParameterizedTest+ @CsvFileSource(resources = “文件名.csv”) 配合,文件必须是.csv类型,示例如下:

@Disabled//忽略当前的测试用例,当前测试用例将不执行
@ParameterizedTest
//注意:文件必须是.csv类型
@CsvFileSource(resources = "test01.csv")
void Test05(int id,String name){System.out.println("id="+id+",name="+name);
}

方法传参
使用 @ParameterizedTest + @MethodSource(“方法名”) 传入一个方法,示例如下:

@ParameterizedTest
@MethodSource("Generator")
void Test06(String num,String name){System.out.println(num+" "+name);
}public static Stream<Arguments> Generator() {return Stream.of(Arguments.arguments("1,你","2,我"));
}

测试套件的使用

测试套件可以简单理解为:一系列测试用例的集合。

测试套件(test suite)有时也称为验证套件(validation suite),是许多测试用例的集合,测试用例可用来测试一程式是否正确工作,测试套件包括许多测试用例,一般也会有针对测试用例及其测试目的的详细说明,在进行测试时的系统组态资讯以及测试前需进行的步骤。

可通过类名集成测试套件,示例如下:

@Suite
@SelectClasses({类名1.class, 类名2.class})
//创建一个新的测试类,类上添加如上两个注解
public class RunSuite {
}

也可通过包名集成测试套件,示例如下:

@Suite
@SelectPackages({"org.example.junit1","org.example.junit2"})
public class RunSuit {
}

Assertions 断言的使用

断言主要用于判断代码逻辑是否正确进而继续执行或中断。

断言(Assertion)是一种用于检查程序或系统在执行某些操作或运行某些代码后是否符合预期行为的技术手段。在测试中,断言通常用于验证代码的正确性,确保代码在满足特定条件时会产生预期的结果。

Assertions 类中的几个静态方法需要掌握

  • assertNotNull:参数不为null就继续执行;
  • assertEquals:两个参数相等就继续执行;
  • assertTrue:参数为true就继续执行。

其他的API根据自己的需要去了解。

实际项目中的使用

在实际的项目中,很多方法是需要注入bean对象之后,用bean对象来调用的。需要在对象上添加如下注解:

import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;@Mock
XXXService xxxService;@InjectMocks
xxxServiceImpl xxxServiceImpl;@Test
void beanTest(){xxxService.xxx();xxxServiceImpl.xxxx();
}

这种方式的测试用例不会与数据库进行交互,需要自定义方法执行过程中的返回值,示例如下:

@Test
void beanTest(){//when中的参数为一个带返回结果的方法调用。//thenReturn 中的参数为 自己想要的返回结果。when(otherBean.method1(arg1...)).thenReturn(目标结果);xxxServiceImpl.test();
}

当然还有可以与数据库进行交互的测试用例,完全还原测试场景的方法。在后续章节详细说明。

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

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

相关文章

CSS animation动画和关键帧实现轮播图效果HTML

CSS animation动画和关键帧实现轮播图效果HTML 这轮播图效果使用h5和css3实现效果&#xff0c;不需要js控制&#xff0c;但是其中的缺点就是不能使用鼠标进行切换效果。 具有代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

华为无线AC内三层漫游配置详解

重要说明 1、在一台ac中实现三层漫游 2、ac和核心的互联vlan和ap的管理vlan是同一个广播域&#xff0c;可以不用配option 43 3、直接转发模式&#xff0c;ac上可以不起业务vlan&#xff0c;ac和核心交换机上可以只放行一个互联vlan 10 4、ac上要启两个vap魔板&#xff0c;两个…

使用JAVA Zookeeper构建分布式键值存储

在这篇文章中,我将使用 JAVA 和网络套接字构建一个简单的分布式键值存储。 我将展示如何在具有多个分区和复制的集群中使用 Zookeeper 作为协调服务。 本系统中Zookeeper服务的功能如下: 维护从服务器到分区的映射,即哪些服务器属于分区“i”。这些数据还可用于推断哪些服务…

flutter 之proto

和嵌入式用proto协议来通信&#xff0c;以mac来演示 先在电脑上安装protobuf&#xff08;在博主文章内容里面搜Mac安装protobuf&#xff09;&#xff0c;然后在桌面上放这几个文件&#xff0c;且build_proto_dart.sh文件内容如图所示 #!/bin/bashSCRIPT$(readlink -f "$0…

【JavaWeb】day01-HTMLCSS

day01-HTML&CSS HTML 图片标签&#xff1a;<img> src&#xff1a;指定图像URL&#xff08;绝对路径/相对路径&#xff09;width&#xff1a;图像宽度&#xff08;像素/相对于父元素的百分比&#xff09;height&#xff1a;图像高度&#xff08;像素/相对于父元素的百…

ubuntu terminator 非常好用的护眼配置

安装 sudo apt install terminator 配置文件&#xff1a;sudo gedit ~/.config/terminator/config &#xff08;如果没有就创建&#xff09; 配置如下&#xff1a; [global_config] handle_size -3 title_transmit_fg_color "#000000" title_trans…

c# label 自定义行间距

label 添加 Paint 事件。用"\n" 段落换行 private void label2_Paint(object sender, PaintEventArgs e){int LineDistance 8;//行间距System.Windows.Forms.Label label sender as System.Windows.Forms.Label;System.Drawing.Font drawFont label.Font;label.Au…

【neo4j】neo4j的安装与使用

【neo4j】neo4j的安装与使用 安装java https://www.oracle.com/java/technologies/downloads/ 按照步骤安装即可 配置环境变量 在系统变量中添加 path变量中添加 安装neo4j https://neo4j.com/deployment-center/ 下载后&#xff0c;在指定位置解压缩 与java相同&#…

R语言【base】——which():给出逻辑对象的 TRUE 索引,允许使用数组索引。

Package base version 4.2.0 Parameters which(x, arr.ind FALSE, useNames TRUE)arrayInd(ind, .dim, .dimnames NULL, useNames FALSE) 参数【x】&#xff1a;逻辑向量或数组。允许省略 NA&#xff08;视作 FALSE&#xff09;。 参数【arr.ind】&#xff1a;逻辑&…

Android MVP 写法

前言 Model&#xff1a;负责数据逻辑 View&#xff1a;负责视图逻辑 Presenter&#xff1a;负责业务逻辑 持有关系&#xff1a; 1、View 持有 Presenter 2、Model 持有 Presenter 3、Presenter 持有 View 4、Presenter 持有 Model 辅助工具&#xff1a;ViewBinding 执行…

ORACLE P6 v23.12 最新虚拟机(VM)全套系统环境分享

引言 根据上周的计划&#xff0c;我简单制作了两套基于ORACLE Primavera P6 最新发布的23.12版本预构建了虚拟机环境&#xff0c;里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机&#xff0c;请先与Oracle Primavera销售代…

Gpt指引ubuntu安装java8/11

在Ubuntu系统上安装Java环境通常包括以下几个步骤&#xff1a; 更新软件包索引&#xff1a; 在安装新软件之前&#xff0c;最好先更新Ubuntu的软件包索引。这可以确保你安装的是最新版本的软件包。可以使用以下命令来更新&#xff1a; sudo apt update安装Java&#xff1a; U…

云原生|对象存储|minio分布式集群的搭建和初步使用(可用于生产)

前言&#xff1a; minio作为轻量级的对象存储服务安装还是比较简单的&#xff0c;但分布式集群可以大大提高存储的安全性&#xff0c;可靠性。分布式集群是在单实例的基础上扩展而来的 minio的分布式集群有如下要求&#xff1a; 所有运行分布式 MinIO 的节点需要具有相同的访…

亚信安慧AntDB数据并行加载工具的实现(二)

3.功能性说明 本节对并行加载工具的部分支持的功能进行简要说明。 1) 支持表类型 并行加载工具支持普通表、分区表。 2) 支持指定导入字段 文件中并不是必须包含表中所有的字段&#xff0c;用户可以指定导入某些字段&#xff0c;但是指定的字段数要和文件中的字段数保持一…

如何利用ChatGPT来提高编程效率

如何利用ChatGPT来提高编程效率 在当今这个信息爆炸和技术快速发展的时代,程序员们面临着巨大的压力,既要保证代码的质量,又要提高工作效率。幸运的是,人工智能(AI)正在改变我们编写和维护代码的方式,而OpenAI的ChatGPT是其中的佼佼者。本文将讨论如何利用ChatGPT以及结合…

leetcode刷题记录07(2023-04-30)【二叉树展开为链表 | 买卖股票的最佳时机 | 二叉树中的最大路径和(递归) | 最长连续序列(并查集)】

114. 二叉树展开为链表 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺…

SQL注入安全漏洞详解

1. SQL注入的原理&#xff1a; SQL注入的攻击行为是通过用户可控参数中注入了SQL语法&#xff0c;改变原有SQL结构&#xff0c;以下两种情况可以造成SQL注入&#xff1a; 1.使用字符串拼接的方式构造SQL语句 2.未对用户可控参数进行严格的过滤&#xff0c;便把参数内容拼接到…

AxGlyph安装教程

AxGlyph安装教程 AxGlyph是一款用于创建科学图表的强大工具&#xff0c;以下是AxGlyph的下载和安装步骤。 步骤一&#xff1a;下载AxGlyph 访问下载地址&#xff1a;点击下载 解压安装包 步骤二&#xff1a;运行安装程序 点击AxGlyph_Setup_Win7_8_10.exe进行安装 安装完成…

FHE简介

1. 引言 加密技术已经存在了数千年&#xff0c;用于相互发送秘密信息。例如&#xff0c;凯撒密码是最早的加密技术之一&#xff0c;可以追溯到公元前60年&#xff0c;其只由字母表中的字母交换组成。 随着互联网的出现&#xff0c;人们生成的私人数据量呈指数级增长&#xff…

【Maven】下载及配置

文章目录 1. 下载2. 解压3. 配置环境变量4. 验证 Maven 是一个跨平台的项目管理工具。作为 Apache 组织的一个颇为成功的开源项目&#xff0c;其主要服务于基于 Java 平台的项目创建&#xff0c;依赖管理和项目信息管理&#xff0c;是一个自动化构建工具&#xff0c;本文将介绍…