Junit框架

news2024/11/18 2:58:36

JUnit 是一个 Java 编程语言的单元测试框架。

环境配置

创建maven项目,导入Junit配置

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

JUnit的一些注意事项

测试方法必须使用 @Test 修饰

测试方法必须使用 public void 进行修饰

一般使用单元测试会新建一个 test 目录存放测试代码,在生产部署的时候只需要将 test 目录下代码删除即可

测试代码的包应该和被测试代码包结构保持一致

测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖

测试类一般使用 Test 作为类名的后缀

测试方法使一般用 test 作为方法名的前缀

注解

  1. @Test:将一个普通方法修饰成一个测试方法 这个方法不能是静态方法

2、@BeforeClass: 会在所有的方法执行前执行 (只会执行一次,而且是第一个运行)被这个注解修饰的方法是static方法

3、@AfterClass:会在所有的方法执行之后执行(只会执行一次,而且是最后一个运行)被这个注解修饰的方法是static方法

4、@Before:会在每一个测试方法被运行前执行一次 这个方法不能是静态方法

5、@After:会在每一个测试方法运行后被执行一次 这个方法不能是静态方法

6、@Ignore:所修饰的测试方法会被测试运行器忽略 可修饰静态和非静态方法

其中,在高版本的junit(junit5)中 @BeforeClass和@AfterClass注解替换为了@BeforeAll和@AfterAll注解,@Before和@After注解替换为@BeforeEach和@AfterEach注解

断言

序号

方法和描述

1

void assertEquals(boolean expected, boolean actual)

检查两个变量或者等式是否相等

2

void assertTrue(boolean condition)

检查条件为真

3

void assertFalse(boolean condition)

检查条件为假

4

void assertNotNull(Object object)

检查对象不为空

5

void assertNull(Object object)

检查对象为空

6

void assertSame(Object expected, Object actual)

assertSame() 方法检查两个相关对象是否指向同一个对象

7

void assertNotSame(Object expected, Object actual)

assertNotSame() 方法检查两个相关对象是否不指向同一个对象

8

void assertArrayEquals(expectedArray, resultArray)

assertArrayEquals() 方法检查两个数组是否相等

Junit各种注解的执行顺序

public class demo1Test {
    @BeforeAll//注解的静态方法最先执行 且执行一次
    public static void print() {
        System.out.println("@BeforeAll注解执行");
    }

    @AfterAll//注解的静态方法最后执行 且执行一次
    public static void print1() {
        System.out.println("@AfterAll注解执行");

    }

    @BeforeEach//注解的方法 在其他方法执行前执行一次
    public void print2() {
        System.out.println("@BeforeEach注解执行");
    }

    @AfterEach
    public  void print3() {
        System.out.println("@AfterEach注解执行");
    }

    @Test
    public  void print4() {
        System.out.println("@Test注解执行");
    }
}

@order注解

控制方法的执行顺序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)  //引入方法排序 这个类的方法就可以使用Order注解进行排序,根据排序执行
public class OrderTest {
    @Test
    @Order(1)//第一个执行
    void print(){
        System.out.println("aaa");
    }
    @Test
    @Order(2)//第二个执行
    void print1(){
        System.out.println("bbb");
    }
    @Test
    @Order(3)//第三个执行
    void print2(){
        System.out.println("ccc");
    }
}

测试套件

在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的。为了解决这个问题,JUnit 提供了一种批量运行测试类的方法,叫做测试套件。

  1. 创建一个空类作为测试套件的入口

  1. 使用@Suite注解修饰类,表示这个类是一个套件

  1. @SelectClasses注解选择加入套件的类

  1. 保证这个空类使用 public 修饰,而且存在公开的不带有任何参数的构造函数

@Suite//表示这个类是一个套件
@SelectClasses({demo1Test.class,demoTest.class})
public class suiteTest {

}

运行这个类,可以同时执行选择的类

除了选择类之外,还可以选择包加入到套件中

使用@SelectPackages()注解的前提是:包里面的类要以Test结尾,所有方法都要加入@Test注解

参数化测试

参数化测试允许开发人员使用不同的值反复运行同一个测试。

  1. @ParameterizedTest注解 标识方法类型是参数化

  1. @ValueSource注解 标识参数来源 其中的类型有int,byte,String,short,long,char等

  1. @ValueSource注解是设置单参数的,使用@CsvSource注解设置多参数,默认分割参数是逗号,delimiterString参数可以设置分隔符

  @org.junit.jupiter.params.ParameterizedTest
    @CsvSource(value = {"张三-10","李四-19"},delimiterString = "-") //设置分隔符是-
    public void setNameAndAge(String name, int age) {
        System.out.println(name + age);
    }
  1. 如果参数内容过多,可以使用文件保存传入数据

使用@CsvFileSource()注解

  1. 在当前项目的resources文件夹下创建.csv文件

  1. 在@CsvFileSource注解中设置文件路径

  @org.junit.jupiter.params.ParameterizedTest
    @CsvFileSource(resources = "/my.csv",delimiterString = "-")
    public void setNameAndAge(String name, int age) {
        System.out.println(name + age);
    }
  1. 如果不是resources文件夹下的文件,就不使用resources参数设置,要使用files参数设置

 @org.junit.jupiter.params.ParameterizedTest
    @CsvFileSource(files = "C:\\Users\\30283\\Desktop\\demo.csv",delimiterString = "-")
    public void setNameAndAge(String name, int age) {
        System.out.println(name + age);
    }

动态参数

方法的参数是不固定的,如果参数是由另外一个方法返回,就要使用@MethodSource(方法名)注解

提供动态参数的方法必须能够生成一个由参数集组成的流。这里所说的“流”是指所有可以被JUnit转换为Stream类型的任何类型,如Stream, DoubleStream, LongStream, IntStream, Collection, Iterator, Iterable,对象数组,原始类型数组等等。流中的元素也可以作为Arguments类的实例、对象数组、单个值(如果参数化测试方法只接受单个参数)等提供给参数化测试方法。

1、处理单参数

//这个方法提供传入的参数 返回的结果可以是Stream流
    private static Stream<String> get() {
        return Stream.of("张三","李四","王五");
    }

    @org.junit.jupiter.params.ParameterizedTest
    @MethodSource("get") //get方法返回的结果 将作为print的参数传入
    public void print(String  num){
        System.out.println(num);
    }

2、处理多参数

这是 提供参数的方法必须返回以Arguments类型的对象为元素的流

 //这个方法提供传入的参数 返回的结果可以是Stream流  arguments对象存储的是实际 传递给函数的参数,
    private static Stream<Arguments>  get() {
        return Stream.of(Arguments.arguments("张三",13), Arguments.arguments("李四",10));
    }

    @org.junit.jupiter.params.ParameterizedTest
    @MethodSource(value = {"get"}) //get方法返回的结果 将作为print的参数传入
    public void print(String num,int age){
        System.out.println(num+age);
    }

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

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

相关文章

Linux常用命令——tail命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tail 在屏幕上显示指定文件的末尾若干行 补充说明 tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个&#xff0c;则在显示的每个文件前面加一个文件名…

【docker概念和实践 4】 常见命令和案例(1)

一、说明 本篇讲述当Docker安装完成后&#xff0c;进行的由浅入深的操作过程。命令种类有&#xff1a;1 进程引擎进程命令 2帮助命令 3 镜像命令 4 容器命令 5 仓库命令。 二、关于操作引擎的指令 本节讲操作引擎的启动、关闭、维护等。以下两种形势都是等价的命令格式。 方法…

Java概览——Java运行机制

Java概览—Java运行机制Java的运行过程 Java程序运行时&#xff0c;必须经过编译和运行两个步骤。首先将后缀名为.java的源文件进行编译&#xff0c;最终生成后缀名为.class的字节码文件&#xff0c;然后Java虚拟机&#xff0c;将字节码文件进行解释执行&#xff0c;并将结果显…

Docker学习笔记【part1】概念与安装

一、Docker的概念 Docker 是实现系统平滑移植、容器虚拟化的技术&#xff0c;基于 Go语言&#xff0c;可以实现软件带环境安装&#xff0c;做到“一次镜像&#xff0c;处处运行”。Docker 是一个 C/S 模式的架构&#xff0c;后端是一个松耦合架构&#xff0c;众多模块各司其职…

九龙证券|次新股叠加智慧交通+信创+数字经济概念,开盘冲涨停!

核算机板块1月以来跑赢上证指数&#xff1b;才智交通、成绩高增及严重财物重组个股登上涨停榜。 证券时报•数据宝核算&#xff0c;1月19日&#xff0c;沪深两市收盘涨停股35只&#xff0c;其中ST股6只。群众交通、长久科技两股一字板强势涨停&#xff0c;潞安环能、跃岭股份收…

【MySQL】第五部分 多表查询

【MySQL】第五部分 多表查询 文章目录【MySQL】第五部分 多表查询5. 多表查询5.1 等值连接5.2 非等值连接5.3 自连接5.4 内连接5.5 外连接5.6 满外连接5.7 SQL99语法实现多表查询5.7.1 JOIN...ON语法5.7.2 使用SQL99语法实现内连接5.7.3 使用SQL99语法实现左外连接和右外连接5.…

postman入门

目录 新建界面 菜单区 百度翻译api实战 post 参数化 新建界面 1&#xff09;可以新建请求&#xff0c;&#xff08;rqueset&#xff09;模拟客户端的请求&#xff0c; 2&#xff09;可以创建测试集合&#xff08;collection&#xff09;&#xff0c;对接口请求进行统一管理…

删除排序链表中的重复元素

删除排序链表中的重复元素 题目描述 原始题目参考&#xff1a;删除有序链表的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1…

java spring IOC Bean管理操作(xml P名称空间注入)

首先 我们来写一个基本的 通过xml的set属性注入 首先创建一个项目 然后引入 spring 最基本的几个依赖包 src下 下有一个 gettingStarted 包 下面有一个 user类 代码如下 package gettingStarted;public class user {public String name;public int age;public void setName(S…

leetcode 1817. 查找用户活跃分钟数【python3,哈希表的实现思路详解】

题目 给你用户在 LeetCode 的操作日志&#xff0c;和一个整数k。日志用一个二维整数数组logs表示&#xff0c;其中每个logs[i] [IDi, timei]表示ID为IDi的用户在timei分钟时执行了某个操作。 多个用户可以同时执行操作&#xff0c;单个用户可以在同一分钟内执行多个操作。指定…

Deno不只是个Javascript运行时

Deno 是一个安全的 JavaScript 和 TypeScript 运行时&#xff0c;作者是 Ryan Dahl&#xff08;也是 Node.js 的原作者&#xff09;。Deno 的诞生之初是为了解决 2009 年首次设计 Node.js 时的一些疏忽。我认为这种改造动机很有道理&#xff0c;因为我相信每个程序员都希望有机…

cmake跨平台构建工具

TOP目录 前言 CMake是一个跨平台的安装编译工具&#xff0c;可以用简单的语句来描述所有平台的安装(编译过程)。CMake可以说已经成为大部分C开源项目标配 因此&#xff0c;作为一名C C发开人员&#xff0c;看到cmake不应该一脸茫然… 作为初学者&#xff0c;通俗的认为cmake…

C语言入门(七)——结构体

复合类型与结构体 数据抽象 数据类型标志 嵌套结构体 复合类型与结构体 在编程语言中&#xff0c;最基本的&#xff0c;不可再分的数据类型称为基本类型&#xff0c;例如整型&#xff0c;浮点型;根据语法规则由基本类型组合而成的类型称为复合类型&#xff0c;例如字符串是…

系统性能优化、性能指标、性能测试

系统性能是互联网应用最核心的非功能性架构目标&#xff0c;系统因为高并发访问引起的首要问题就是性能问题&#xff1a;高并发访问的情况下&#xff0c;系统因为资源不足&#xff0c;处理每个请求的时间就会变慢&#xff0c;看起来就是性能变差。 因此&#xff0c;性能优化是…

1596_AURIX_TC275_LMU简介

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个章节其实没有多少页文档&#xff0c;而大部分的文档其实是寄存器的字段描述。因此&#xff0c;这次一次性把这个文档的内容大概看完。 LMU提供了32K的本地通用RAM。ED存储的访问也是通…

Mybatis 框架开发的准备

从百度中“mybatis download”可以下载最新的 Mybatis 开发包。进入选择语言的界面&#xff0c;进入中文版本的开发文档。下载相关的 jar 包或 maven 开发的坐标。下载的 zip 文件如下&#xff08;我们的资料文件夹&#xff09;&#xff1a;我们所使用的 Mybatis 版本是 3.2.7 …

我在CSDN的2022:突破零粉丝,4个月涨粉4000+,2023年目标5万+

文章目录前言我为什么又回来写博客&#xff1f;初写文章碰壁1024活动第一次上热榜关于上热榜博客之星2023年目标最后前言 今年最自豪的事&#xff0c;我用业余时间&#xff0c;在CSDN上坚持创作了4个月&#xff0c;产出了20多篇博客&#xff0c;其中7篇文章上了全站热榜&#…

Python基础必经之路——函数

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 目录前言定义函数向函数传递信息实参和形参传递实参返回值将函数存储在模块中导入整个模块尾语 &#x1f49d;定义函数 下面是一个打印问候语的简单函数 def greet_user():print("hello") greet_user()本例示例…

excel函数技巧:如何快速汇总销售合计项

一年的销售数据整理完了&#xff0c;除了要看到每个人的销售合计之外&#xff0c;老板今年还要看到图中这两项合计&#xff1a;销量最高的三个月合计是指汇总每人一年中&#xff0c;销量最高的三个月的数据。超过平均值的销售合计是指汇总超过总平均值的月份销量。两项合计需要…

【进阶】Spring Boot日志文件

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、日志有什么用二、日志怎么用三、 自定义日志打印四、 日志级别五、日志持久化六、更简单的日志输出——lombok小结普通小孩也要热爱生活&#xff01; 一、日志有什么用 日志是解决问题最直观、最有效的方法。⽇…