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 {
   @Test
    public 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 {
   @Test
    public 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 {
   @Test
    public 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 {
   @Test
    public 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 {
   @Test
    public 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 {
   @Test
    public void testAdd(){
       System.out.println("test1");
    }
    @Test
    public void testDelete(){
        System.out.println("test2");
    }
    @BeforeClass
    public static void beforeClass(){
        System.out.println("beforeClass.....");
    }
    @After
    public void after(){
        System.out.println("after......");
   }
    @AfterClass
    public static void afterClass(){
       System.out.println("afterClass....");
   }
    @Before
    public void before(){
        System.out.println("before.....");
    }
}

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

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

在这里插入图片描述

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

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

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

Tests1

import org.junit.Test;
 
public class Tests1 {
    @Test
    public 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测试类的使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最小生成树

目录 带权图 带权图java代码实现 最小生成树 Kruskal算法 ​切分定理 Kruskal算法的java代码实现 Prim算法 Prim算法的java代码实现 总结 带权图 边上的权是附加的额外信息&#xff0c;可以代表不同公路的收费等你需要的信息。 带权图java代码实现 port java.io.File…

mysql---squid代理服务器

squid代理服务器 nginx也可以代理&#xff1a;反向代理--------负载均衡 squid:正向代理服务器。例&#xff1a;vpn squid &#xff1a;正向代理&#xff0c;缓存加速&#xff0c;acl过滤控制 代理的工作机制 1、代替客户端向网站请求数据&#xff0c;不需要访问代理的IP地址…

AI时代,如何防范诈骗的建议

以下是一些防范AI诈骗的方法&#xff1a; 认知教育&#xff1a;了解AI技术的应用和局限性&#xff0c;学习如何识别虚假信息和诈骗手段。保护个人信息&#xff1a;不要轻易泄露个人信息&#xff0c;尤其是身份证号码、银行卡号等敏感信息。谨慎对待陌生人的联系和信息&#xf…

前后端分离项目在Linux的部署方法、一台Nginx如何部署多个Web应用

需求场景:目前有三个前后端分离项目(vue+springboot),Linux服务器一台,nginx一个,比如服务器地址为www.xxxxxxx.com 我想通过80端口访问服务①(即访问www.xxxxxxx.com);通过81端口访问服务②(即www.xxxxxxx.com:81);通过82端口访问服务③(即www.xxxxxxx.com:82) ①部…

Java抽象类和接口

抽象类 看看这个代码 class Shape{public void draw(){System.out.println("画图形");} } class Cycle extends Shape{Overridepublic void draw() {System.out.println("⚪");} } class Rect extends Shape{Overridepublic void draw() {System.out.pri…

一个集成了AI和BI报表功能的新一代数据库管理系统神器--Chat2DB

世人皆知Navicate&#xff0c;无人识我Chat2DB &#x1f4d6; 简介 Chat2DB 是一款开源免费的多数据库客户端工具&#xff0c;支持多平台和主流数据库。 集成了AI的能力&#xff0c;能进行自然语言转SQL、SQL解释、SQL优化、SQL转换 ✨ 好处 1、AIGC和数据库客户端的联动&am…

[Vue 代码模板] Vue3 中使用 Tailwind CSS + NutUI 实现侧边工具栏切换主题

文章归档&#xff1a;https://www.yuque.com/u27599042/coding_star/vzkgy6gvcnpl3u2y 效果示例 配置 src 目录别名 https://www.yuque.com/u27599042/coding_star/ogu2bhefy1fvahfv 配置 Tailwind CSS https://www.yuque.com/u27599042/coding_star/yqzi9olphko9ity1 配置…

各地区农村及城镇恩格尔系数数据集(1978-2022年)

恩格尔系数是以德国统计学家恩格尔&#xff08;Ernst Engel&#xff09;的名字命名的一个经济指标&#xff0c;用来衡量食品支出占家庭总支出的比例。一般来说&#xff0c;恩格尔系数越低&#xff0c;表明家庭在食品上的支出占比越小&#xff0c;相对而言家庭的生活水平和经济条…

StringBuffer和StringBuilder的区别与联系

文章目录 区别一览StringBuffer如何实现多线程同步关键字&#xff08;Synchronized&#xff09;性能考虑使用场景 当不使用多线程的情况下&#xff0c;是否StringBuffer和StringBuilder的性能一样&#xff1f;性能差异原因实践中的选择结论 区别一览 StringBuffer 和 StringBu…

Unity Quaternion接口API的常用方法解析_unity基础开发教程

Quaternion接口的常用方法 Quaternion.Euler()Quaternion.Lerp()Quaternion.Inverse()Quaternion.RotateTowards() Quaternion在Unity中是一种非常重要的数据类型&#xff0c;用于表示3D空间中的旋转。Quaternion可以表示任何旋转&#xff0c;无论是在哪个轴上旋转多少度&#…

fablic 矩形多边形展示删除按钮

标注的矩形框或者多边形框展示删除按钮&#xff1b; 官网有一个例子 我原本想着按照他这个思路&#xff0c;很简单的&#xff1b; 可是当我在使用的过程中&#xff0c;遇到了一些问题&#xff0c;多变想不展示删除按钮&#xff1b;并且如果之前有矩形&#xff0c;无法渲然删除按…

拿走吧你,Fiddler模拟请求发送和修改响应数据

fiddler模拟伪造请求 方法一&#xff1a;打断点模拟HTTP请求 1、浏览器页面填好内容后&#xff08;不要操作提交&#xff09;&#xff0c;打开fiddler&#xff0c;设置请求前断点&#xff0c;点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在…

问题总结(持续更新)

Linux 1.虚拟机问题 打开虚拟机所在目录对 后缀 .vmx文件进行修改 vmcio.present"FALSE" 改为FALSE即可 2.因某些问题导致本来正常的虚拟机没有网络了 重新配置网络 vim /etc/sysconfig/network-scripts/ifcfg-enstab补全 service network restart 重启网络 Sentina…

海外推广必备|如何制定领英LinkedIn营销战略?

在网络上脱颖而出不是一件简单的事。不仅有比以往更多的平台、算法和内容类型&#xff0c;而且还有更多的企业在争夺注意力。据统计&#xff0c;每天有超过 270 万家公司在 LinkedIn 上发布信息。 策略很重要&#xff0c;尤其是在 LinkedIn 营销领域。下面将为你总结LinkedIn 营…

操作系统OS/进程与线程/线程

进程和线程 进程 进程实体&#xff08;进程映像&#xff09;由PCB、程序段和数据段组成&#xff0c;其中PCB是进程存在的唯一标志。 线程 线程最直接的理解就是“轻量级进程”&#xff0c;它是一个基本的CPU执行单元&#xff0c;包含CPU现场(状态)&#xff0c;也是程序执行…

uniapp Android如何打开常用系统设置页面?

uniapp Android 如何打开常用系统设置页面&#xff1f; 在使用App过程时&#xff0c;有时候会对一些权限获取&#xff0c;比如打开蓝牙、打开通知栏通知等设置&#xff0c;我们如何快速跳转到需要的设置页面&#xff1f; 文章目录 uniapp Android 如何打开常用系统设置页面&…

500mA 线性锂电充电芯片 DP4054/DP4054H完全兼容替代TP4054

锂电池是一种新型的可充电电池&#xff0c;其具有体积小、重量轻、容量大耐用性强等特点&#xff0c;因此被广泛应用于手机、笔记本电脑、移动电源等电了设备上。 充电原理是指电池在充电过程中&#xff0c;用电流将锂离子从外部电源输入电池&#xff0c;使其形成 一个电荷差&…

【LeetCode刷题-滑动窗口】--424.替换后的最长重复字符

424.替换后的最长重复字符 方法&#xff1a;滑动窗口 右边界先移动找到一个满足题意的可以替换k个字符以后&#xff0c;所有字符都变成一样的当前看来最小的子串&#xff0c;直到右边界纳入一个字符以后&#xff0c;不能满足的时候停下然后考虑左边界右移&#xff0c;左边界只…

阿里5年经验之谈 —— 记录一次jmeter压测的过程!

在软件架构与中间件实验的最后&#xff0c;要求进行非功能测试&#xff0c;那得非压力测试莫属了。虽然之前学习秒杀项目的时候看视频里面用过jmeter&#xff0c;但没有自己实操过&#xff0c;趁着这次机会&#xff0c;使用一下。 QPS与TPS 1、TPS&#xff1a; Transactions …

matlab如何实现任意长序列所有排列方式

最近被问到一个问题&#xff0c;如何计算一个由3个0和3个1组成的序列的所有组合情况&#xff0c;处理这个问题我没有找到特别恰当的函数&#xff08;如果有能直接做的函数欢迎评论告知&#xff09;&#xff0c;所以采用比较接近需求的perms函数来解决这个问题 首先看perms函数…