当前位置: 首页 > news >正文

JUNIT使用和注意、以及断言的介绍使用、SpringBoot Test测试类的使用、maven配置使用junit详细介绍

参考文章: https://www.cnblogs.com/zhukaile/p/14514238.html,https://blog.csdn.net/qq_36448800/article/details/126438339

一、什么是单元测试

在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保证这些方法产生的结果是我们想要的呢?当然了,最容易想到的一个方式,就是我们通过System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中这些成千上万个方法,我们总不能在每一个方法中都去输出一遍嘛。这也太枯燥了。这时候用我们的单元测试框架junit就可以很好地解决这个问题。Junit是一个单元测试框架

二、使用

注意:用Junit进行单元测试必须满足以下条件

1、每一个测试方法上使用@Test进行修饰
2、每一个测试方法必须使用public void 进行修饰
3、每一个测试方法不能携带参数
4、测试代码和源代码在两个不同的项目路径下
5、测试类的包应该和被测试类保持一致
6、测试单元中的每个方法必须可以独立测试

1.Junit的jar包导入

如果不是maven项目,直接网上下载junit的jar包,如果是maven项目,直接导入maven依赖,版本改成自己需要。但是要注意,4.10以上版本的junit要配合hamcrest-core的jar包使用。这里我建议直接用5的,因为有时候用四会报错 java @Test 使用不了

如需详细了解为什么,可以参考我的另一篇文章:https://blog.csdn.net/munangs/article/details/126671706 进去直接使用ctrl+f搜索junit即可

<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.6.2</version>
</dependency>

2.Junit简单使用

import org.junit.*;public class Tests {@Testpublic void testAdd(){System.out.println("test1");}
}

左击方法名,点击运行按钮,选择debug模式,运行结果如图
在这里插入图片描述

3.对方法进行断言测试

这里写了三个方法,主要对以下方法用断言进行测试,代码如下

public class Method {public int add(int a,int b){return a+b;}public int delete(int a,int b){return a-b;}public boolean isTrue(){return 2==1;}
}

1)、assertEquals

断言判断是否相等,这个方法里面可以又很多参数,一般根据我们的需要输入相应的参数
在这里插入图片描述

在这里选择assertEquals(Object expected,Object actual),expected指的是期望得到的值,actual指实际返回的结果,如果期望值和实际结果不相等,就会抛异常,即断言失败。我们对add方法进行测试,代码如下

public class Tests {@Testpublic void testAdd(){Assert.assertEquals(3,new Method().add(3,1));System.out.println("test1");}
}

输入值和期望值不一样,这里抛出异常
在这里插入图片描述

2、assertTrue/assertFalse

该断言用来验证给定的布尔型值是否为真,假如结果为假,则验证失败
方法: assertTrue ([String message],Boolean condition)
message是个可选的消息,假如提供,将会在发生错误时报告这个消息。
这里测试isTrue方法,测试代码如下:

public class Tests {@Testpublic void testTrue(){Assert.assertTrue("不相等",new Method().isTrue());System.out.println("test1");}
}

很明显,测试代码里面返回的是false,所以会抛出message消息

assertFalse方法同上,只是判断的结果相反,如果boolean中返回为false则不抛异常,返回为true抛出message消息

在这里插入图片描述

3)、assertNull

这个方法很好理解,就不写专用的方法来进行演示。用于判断函数返回是否为空
方法:assertNotNull([String message],Object object)
message即返回为空之后的打印的消息,object是判断的方法
测试代码如下:

public class Tests {@Testpublic void testTrue(){Assert.assertNull("不为空","abcde");System.out.println("test1");}
}

测试结果:如果判断的对象不为空,则会抛出message消息,为空则通过测试
在这里插入图片描述

4)、assertSame

该断言用来验证expected参数和actual参数所引用的是否是同一个对象,假如不是,则验证失败。相应地,也存在验证不是同一个对象的断言。(和assertEquals区别在于,这个用于判断实际结果是否与期望结果的引用内存地址相同,类似于==,而assertEquals类似于equals方法)
 方法:assertNotSame ([String message], expected,actual)
 message也是断言失败后打印的消息,expected是期望值,actual是实际值
 测试代码:

public class Tests {@Testpublic void testTrue(){Assert.assertSame("不相等",2,4-3);System.out.println("test1");}
}

测试结果:2肯定是不等于1的,这个时候会打印错误信息。
在这里插入图片描述

4).运行流程

如果我们要在每个测试之前打开数据库,又关闭数据库,这样如果在每个方法里面写流程会非常麻烦,这个时候就有专有的测试方法运行前后进行操作的方法。其中beforeClass和afterClass方法必须是静态方法

@BeforeClass (setUpBeforeClass方法):
注解静态方法;在运行测试类时最先运行且只执行一次。
@AfterClass (tearDownAfterClass方法):
注解静态方法;在运行测试类时最后个运行且只执行一次。
@Before(setUp方法)
在执行每个@Test之前执行,每个@Test执行前都会执行@Before。
@Test
要执行的测试单元
@After(tearDown方法)
在执行每个@Test之后执行,每个@Test执行结束后都会执行@After
public class Tests {@Testpublic void testAdd(){System.out.println("test1");}@Testpublic void testDelete(){System.out.println("test2");}@BeforeClasspublic static void beforeClass(){System.out.println("beforeClass.....");}@Afterpublic void after(){System.out.println("after......");}@AfterClasspublic static void afterClass(){System.out.println("afterClass....");}@Beforepublic void before(){System.out.println("before.....");}
}

打印结果:
在这里插入图片描述

这里我们可以看到它的运行流程是这样的:

在这里插入图片描述

5)、junit测试套件(批量测试)

有的时候我们可能不止要对一个类进行测试,这个时候就要用到测试套件,两个测试类如下
Tests:

public class Tests {@Testpublic void testAdd(){System.out.println("test1");}
}

Tests1

import org.junit.Test;public class Tests1 {@Testpublic void testDelete(){System.out.println("test2");}
}

套件类Combine:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;@RunWith(Suite.class)//用于更改测试运行器
@Suite.SuiteClasses({Tests.class,Tests1.class})//将要测试的类作为数组传入到@Suite.SuiteClasses({})中
public class Combine {/**注意,该类中不要写任何代码**/
}

直接点击类名进行Debug
运行结果如图:
在这里插入图片描述

三、SpringBoot Test测试类的使用

参考我的另一篇文章:SpringBoot Test测试类的使用

相关文章:

JUNIT使用和注意、以及断言的介绍使用、SpringBoot Test测试类的使用、maven配置使用junit详细介绍

参考文章&#xff1a; https://www.cnblogs.com/zhukaile/p/14514238.html&#xff0c;https://blog.csdn.net/qq_36448800/article/details/126438339 一、什么是单元测试 在平时的开发当中&#xff0c;一个项目往往包含了大量的方法&#xff0c;可能有成千上万个。如何去保…...

强化学习在文生图中的应用:Training Diffusion Models with Reinforcement Learning

论文链接:Training Diffusion Models with Reinforcement Learning项目地址:Training Diffusion Models with Reinforcement Learning官方代码:https://github.com/kvablack/ddpo-pytorch/tree/maintrl实现:https://huggingface.co/docs/trl/ddpo_trainer🤗关注公众号 fu…...

【C语言】数组下标为啥从0开始?下标越界访问一定报错吗?

本篇文章目录 0. 相关文章1. 下标从0开始问题2. 数组下标越界不报错问题 0. 相关文章 指针与指针变量数组名不是首元素地址的的2个例外拨开指针和数组名之间的迷雾 1. 下标从0开始问题 原因是&#xff1a;数组下标访问本质是“指针解引用操作”&#xff0c;而指针又是地址&am…...

机器学习-搜索技术:从技术发展到应用实战的全面指南

在本文中&#xff0c;我们全面探讨了人工智能中搜索技术的发展&#xff0c;从基础算法如DFS和BFS&#xff0c;到高级搜索技术如CSP和优化问题的解决方案&#xff0c;进而探索了机器学习与搜索的融合&#xff0c;最后展望了未来的趋势和挑战&#xff0c;提供了对AI搜索技术深刻的…...

Axelar、J.P.Morgan Onyx、Apollo 完成概念验证,向跨区块链自动化投资领域探索

J.P.Morgan Onyx、Apollo、Axelar、Oasis Pro 以及 Provenance Block Chain 展开合作&#xff0c;共同进行互操作性概念验证&#xff08;Proof-of-Concept&#xff0c;PoC)。 新加坡 — Axelar Inc.、Oasis Pro 、Provenance Blockchain 与 J.P.Morgan Onyx 以及 Apollo 通过新…...

wpf devexpress添加TreeListControl到项目

此教程示范如何添加TreeListControl到项目和绑定控件自引用数据源&#xff1a; 添加数据模型 绑定tree&#xff0c;并添加如下字段到数据源对象&#xff1a; Key字段包含唯一值索引节点 Parent字段包含父索引节点 添加数据模型&#xff08;Employee和Staff类&#xff09;到…...

WPF创建自定义控件编译通过但是找不到资源

报错&#xff1a; 原因: 路径写错了&#xff1a; 不是这样&#xff1a; Source"pack://application:,,,/Controls/Styles/xTabControl.xaml" 而是这样&#xff1a; Source"pack://application:,,,/项目名;component/Controls/Styles/xTabControl.xaml …...

PHP 中传值与传引用的区别,什么时候传值什么时候传引用?

传值&#xff1a;当使用传值的方式时&#xff0c;函数或方法会创建原始变量的一个副本&#xff0c;并将该副本传递给函数或方法。在函数或方法内部&#xff0c;对副本的任何修改都不会影响到原始变量。当函数或方法执行完毕后&#xff0c;副本被销毁&#xff0c;不再使用。 传引…...

es安装方式

es安装方式 1.下载镜像的方式 分词器 kibana和es和容器互通的方式 docker network create es-net开始拉去镜像的方式 docker pull kibana:7.12.1运行镜像的方式 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-…...

苍穹外卖项目笔记(2)

1 Nginx 反向代理和负载均衡 1.1 概念 【Tips】可以看到前端请求地址和后端接口地址并不匹配&#xff0c;这里涉及到 nginx 反向代理 &#xff0c;就是将前端发送的动态请求由 nginx 转发到后端服务器 使用 nginx 作反向代理的好处&#xff1a; 提高访问速度&#xff08;在请…...

hive更改表结构的时候报错

现象 FAILED: ParseException line 1:48 cannot recognize input near ADD COLUMN compete_company_id in alter table statement 23/11/14 17:59:27 ERROR org.apache.hadoop.hive.ql.Driver: FAILED: ParseException line 1:48 cannot recognize input near ADD COLUMN compe…...

redis运维(六)redis-cli命令

一 redis-cli 注意&#xff1a; redis-cli核redis-server版本必须适配 --> 见 redis-cli --version提示&#xff1a; 不过一般安装服务端 redis-server 时内置了客户端 redis-cli说明&#xff1a; redis-cli 是 redis 的一种命令行的客户端工具备注&#xff1a; redis-se…...

JDK1.8 新特性(二)【Stream 流】

前言 上节我们学了 lambda 表达式&#xff0c;很快我就在 Flink 的学习中用到了&#xff0c;我学的是 Java 版本的 Flink&#xff0c;一开始会以为代码会很复杂&#xff0c;但事实上 Flink 中很多地方都用到了 函数接口&#xff0c;这也让我们在编写 Flink 程序的时候可以使用 …...

阿里云CentOS主机开启ipv6

目录 一、云主机开启和使用 ipv6 1、网络和交换机开启 ipv6 2、创建 / 编辑云主机&#xff0c;开启ipv6 3、安全组放行ipv6端口 二、使用 ipv6 地址进行 ssh 连接 三、ipv6 地址绑定域名 一、云主机开启和使用 ipv6 1、网络和交换机开启 ipv6 进入网络、交换机详情页面…...

【Git】第五篇:基本操作(添加文件)

.git目录结构 我们在前文中提过了.git目录&#xff0c;也明确说了我们不能手动去.git目录下创建修改等任何操作。 添加文件 我们现在已经了解到&#xff0c;git是一个版本控制器&#xff0c;可以对我们的文件进行管理。而我们需要使用git管理文件的时候&#xff0c;我们必须将…...

vue通过span-method合并列之后,合并列显示在中间位置,根据鼠标滑动跟随展示

当vue通过span-method合并列之后&#xff0c;出现的合并列显示在中间位置&#xff0c;但是如果页面没有分页&#xff0c;如何进行展示呢&#xff0c;难道要滑到最下面去看吗&#xff0c;下面我们来根据鼠标滑动跟随展示 没有处理的合并页面 <template> <el-table:dat…...

gRPC 四模式之 一元RPC模式

一元RPC模式 一元 RPC 模式也被称为简单 RPC 模式。在该模式中&#xff0c;当客户端调用服务器端的远程方法时&#xff0c;客户端发送请求至服务器端并获得一个响应&#xff0c;与响应一起发送的还有状态细节以及 trailer 元数据&#xff08;这部分不是默认发送的&#xff0c;…...

Java GUI实现贪吃蛇游戏

贪吃蛇是一款经典的游戏&#xff0c;玩法相对简单但富有挑战性。以下是贪吃蛇游戏的基本玩法说明&#xff1a; 目标&#xff1a;控制一条蛇&#xff0c;在游戏区域内吃到尽可能多的食物&#xff0c;使蛇身变长&#xff0c;同时避免撞到自己的身体或游戏区域的边界。 控制&…...

Vue3 使用教程

目录 一、创建vue3工程1. 使用vue-cli创建2.使用 vite 创建 二、setup使用三、ref函数四、reactive函数五、计算属性与监视属性5.1 computed函数5.2 watch函数5.3 watchEffect函数 六、自定义hook函数七、toRef函数八、shallowReactive 与 shallowRef九、readonly 与 shallowRe…...

卡方检验-python代码

故事背景 问题 卡方检验的结果怎么计算&#xff1f; 方法 python代码 import numpy as np from scipy.stats import chi2_contingency# 观察频数矩阵 observed np.array([[47, 21, 17],[63, 29, 15],[11, 2, 4]])# 进行卡方检验 chi2, p, dof, expected chi2_contingency(o…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...