Java单元测试JUnit

文章目录

  • 前言
  • 一、JUnit描述(引入Maven)
  • 二、基本API+注解
    • 2.1、Assert类
    • 2.2、JUnit注解
  • 三、普通单元测试
    • 3.1、BeforeClass、AfterClass、Before、After、Test合集测试
  • 四、SpringBoot单元测试
    • 4.1、SpringBoot集成Junit介绍
    • 4.2、实战:SpringBoot项目添加功能测试类
  • 参考文章
  • 资料获取

干货分享福利领取活动公众号首图

前言

博主介绍:✌目前全网粉丝4W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。

博主所有博客文件目录索引:博客目录索引(持续更新)

CSDN搜索:长路

视频平台:b站-Coder长路

一、JUnit描述(引入Maven)

JUnit是一种Java语言的单元测试框架,它是最流行的单元测试框架之一。它提供了一些可用于编写和运行测试的API,并且可以生成测试报告。JUnit适用于所有Java语言的项目,例如Java应用程序、Java Servlet、Java EE应用程序以及Android应用程序等。

依赖版本

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>

二、基本API+注解

2.1、Assert类

Assert是JUnit框架提供的一个断言类,用于验证测试结果和预期结果是否相符。我们可以使用Assert类来编写断言代码,从而保证测试的正确性和可靠性。

  • assertEquals(expected, actual):验证两个值是否相等,如果不相等则抛出AssertionError异常。
  • assertNotEquals(expected, actual):验证两个值是否不相等,如果相等则抛出AssertionError异常。
  • assertTrue(condition):验证给定的条件是否为true,如果不是则抛出AssertionError异常。
  • assertFalse(condition):验证给定的条件是否为false,如果不是则抛出AssertionError异常。
  • assertNull(object):验证给定对象是否为空(null),如果不为空则抛出AssertionError异常。
  • assertNotNull(object):验证给定对象是否不为空(null),如果为空则抛出AssertionError异常。
  • assertArrayEquals(expected, actual):验证两个数组是否相等,如果不相等则抛出AssertionError异常。
  • assertSame(expected, actual):验证两个对象是否相等,如果不相等则抛出AssertionError异常。
  • assertNotSame(notExpected, actual):验证两个对象是否不相等,如果相等则抛出AssertionError异常。

断言方法的第一个参数通常是预期值(expected),而第二个参数则是实际值(actual)。


2.2、JUnit注解

所有的注解如下:

  • @Test:这是JUnit最重要的注解之一,它被用来标记测试方法。JUnit会执行所有带有@Test注解的方法,以验证代码的正确性。
  • @Before:在每个测试方法执行之前该注解所标注的方法会被执行。通常,这个注解可以用于初始化测试数据和资源。
  • @After:在每个测试方法执行之后该注解所标注的方法会被执行。通常,这个注解可以用于清理测试数据和资源。
  • @BeforeClass:在整个测试类中只执行一次,在执行测试用例之前该注解所标注的方法会被执行,且这个方法必须是静态方法,也就是这个方法会在类加载时执行。通常,这个注解可以用于初始化静态数据和资源。
  • @AfterClass:在整个测试类中只执行一次,在执行测试用例之后该注解所标注的方法会被执行,同样,这个方法必须是静态方法。通常,这个注解可以用于清理静态数据和资源。
  • @Ignore:该注解表示忽略某个测试方法,不会执行该方法。通常,这个注解可以用于临时禁用某个测试用例。
  • @RunWith:该注解定义测试运行器,JUnit默认使用BlockJUnit4ClassRunner作为测试运行器。如果需要使用其他运行器,可以在注解中指定。【一般配合springboot】
  • @Parameters:该注解可以用于动态参数化测试方法,使测试方法能够接受不同的输入参数。
  • @Rule:该注解定义测试规则(Test Rule),可以在测试方法执行前后实施某些操作,如超时控制、异常检测等。
  • @ClassRule:类似于@Rule,但是粒度更大,可以对整个测试类进行规则控制。

三、普通单元测试

3.1、BeforeClass、AfterClass、Before、After、Test合集测试

说明:主要研究下所有单元测试注解的生命周期。

  • BeforeClass、AfterClass:整个完整测试过程中各自只执行一次。【类级别】
  • Before、After:对于每一个Test方法都会提前或最终执行一次。【方法级】

img

package com.changlu;
import org.junit.*;public class MainTest {@BeforeClasspublic static void beforeClass() {System.out.println("BeforeClass");}@AfterClasspublic static void afterClass() {System.out.println("afterClass");}@Beforepublic void before() {System.out.println("-----------");System.out.println("before");}@Afterpublic void After() {System.out.println("After");System.out.println("-----------");}@Testpublic void testCon1() {//断言验证为true,测试通过Assert.assertTrue(true);System.out.println("testCon1");}@Testpublic void testCon2() {//断言验证为true,测试通过Assert.assertTrue(true);System.out.println("testCon2");}
}

运行结果:

img


四、SpringBoot单元测试

4.1、SpringBoot集成Junit介绍

Springboot集成JUnit写单元测试类需要使用RunWith注解,这个注解需要一个值,测试运行器。

测试运行器(Test Runner)是JUnit框架提供的一个核心组件,用于执行测试类中的测试方法并生成测试报告。JUnit提供了多个测试运行器,不同的运行器可以根据不同的需求来选择使用。

  • JUnit4:JUnit4是JUnit框架的主流版本,支持使用注解方式进行测试。我们一般会选择使用@RunWith(JUnit4.class)运行器来执行测试用例。
  • SpringRunner:SpringRunner是Spring Boot Test框架中提供的测试运行器,用于执行集成测试和端到端测试等。可以使用@RunWith(SpringRunner.class)运行器来启动Spring Boot上下文环境,并进行测试。
  • Parameterized:Parameterized是JUnit提供的一个参数化测试运行器,可以让我们在单元测试中重复运行相同的测试方法,并对方法参数进行变量化处理。
  • Theories:Theories是JUnit提供的一个更加高级的参数化测试运行器,可以生成随机数据、枚举值、自定义输入等多种方式来测试方法的正确性。
  • Suite:Suite运行器可以将多个测试类组合成一组测试用例,方便批量执行和管理测试用例。

4.2、实战:SpringBoot项目添加功能测试类

引入JUnit依赖:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>

img

import com.team.order.FoodOrderSpringBootApplication;
import com.team.order.service.CaipinService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;/*** @description  创建测试类单元测试* @date 2024/4/19 15:33*/
@SpringBootTest(classes = FoodOrderSpringBootApplication.class)
@RunWith(SpringRunner.class)
public class MainTest {@Autowiredprivate CaipinService caipinService;@Testpublic void testCaipin() {System.out.println(caipinService.selectList(null));}}

运行结果如下:

img


参考文章

[1]. JUnit单元测试:https://blog.csdn.net/weixin_44084024/article/details/130204119

[2]. 【SpringBoot应用篇】SpringBoot集成JUnit单元测试:https://blog.csdn.net/qq_45297578/article/details/118935974

资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

  • 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
  • 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
  • 学习与生活-专栏:可以了解博主的学习历程
  • 算法专栏:算法收录

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅

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

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

相关文章

HR数字化转型:3大痛点解决方案与效率突破指南

在人力资源部门工作多年&#xff0c;每天面对堆积如山的简历、此起彼伏的员工咨询、错综复杂的薪酬报表……作为HR的你&#xff0c;是否常感到被海量事务性工作淹没&#xff0c;难以喘息&#xff1f;在数字化转型的浪潮下&#xff0c;传统工作方式正遭遇前所未有的挑战。本文将…

如何运用个人IP影响力寻找使命的力量|创客匠人

在知识付费领域&#xff0c;那些能穿越周期的 IP&#xff0c;往往不只是 “卖课机器”&#xff0c;而是以使命为内核的价值传递者。使命为知识变现注入灵魂&#xff0c;让知识产品从 “信息交易” 升华为 “价值共鸣”&#xff0c;这正是个人 IP 实现深度变现与长期影响力的关键…

软件开发中的瀑布式开发与敏捷开发

一、瀑布式开发&#xff08;Waterfall Model&#xff09;核心流程 采用线性、阶段化开发&#xff0c;依次经历需求分析、设计、开发、测试、部署、维护&#xff0c;前一阶段完成后进入下一阶段&#xff0c;如瀑布流水单向推进。 典型阶段&#xff1a;需求固化→架构设计→代码实…

如何卸载SQLServer

1.打开控制面板2.双击&#xff0c;弹出对话框&#xff0c;点击删除3.然后一步一步跟着提示&#xff0c;下一步下一步就好了。4.如果发现没有卸载干净&#xff0c;快捷键winR&#xff0c;输入regedit&#xff0c;进入注册表5.找到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\…

策略设计模式分析

策略设计模式概述策略模式&#xff08;Strategy Pattern&#xff09;属于行为型设计模式&#xff0c;允许在运行时动态选择算法或行为。它将算法封装成独立的类&#xff0c;使得它们可以相互替换&#xff0c;而不会影响客户端代码。核心组件1. 策略接口&#xff08;Strategy In…

IPM31主板E3300usb键盘鼠标安装成功Sata接口硬盘IDE模式server2003-nt-5.2.3790

IPM31主板E3300usb键盘鼠标安装成功Sata接口硬盘IDE模式server2003-nt-5.2.3790

Docker环境搭建与容器操作全攻略:从入门到实战

一、环境搭建 1.1 基础包安装&#xff08;最小化系统&#xff09; # 备份Yum源配置 mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 配置Yum源示例 可以更换为阿里云镜像 cat <<EOF > /etc/yum.repos.d/local.repo [baseos] …

4.2TCP/IP

1、TCP/IP基础&#xff08;重要&#xff09;概要网络协议3要素&#xff1a;语法、语义、时序 osi七层模型&#xff1a;应用层、表示层、会话层、传输层、网络层、数据链路层、物理层tcp四层模型&#xff1a;应用层&#xff08;应用层、表示层、会话层&#xff09;、传输层、int…

Java之Stream其二

文章目录5,Optional5.1,概述5.2,使用5.2.1,创建对象5.2.2,安全消费值5.2.3,获取值5.2.4,安全获取值5.2.5,过滤5.2.6,判断5.2.7,数据转换6,方法引用6.1 推荐用法6.2 基本格式6.3 语法详解(了解)6.3.1 引用类的静态方法6.3.2 引用对象的实例方法6.3.3 引用类的实例方法6.3.4 构造…

一般芯片电气特性中Flash参数达到其最大值的条件是什么?

芯片电气特性中标注的最大值&#xff08;比如 Data Flash 擦除时间的最大值&#xff09;&#xff0c;代表在最恶劣但仍在规格书定义的工作条件范围内的情况下&#xff0c;该参数可能达到的最差值。达到这个最大值通常是由多个最坏情况因素组合造成的。 对于 Data Flash 擦除时间…

python中正则中的split方法、sub方法、finditer方法、compile方法、match对象

正则常见方法梳理 split方法 将一个字符串按照正则表达式匹配结果进行分割,返回结果是列表类型。 pattern:正则表达式的字符串或原生字符串表示string:待匹配字符串maxsplit:最大分割数,剩余部分最为最后一个元素输出flags:正则表达式使用时候的控制标记 re模块的spli…

Pytorch中张量的索引和切片使用详解和代码示例

PyTorch 中张量索引与切片详解 使用前先导入&#xff1a; import torch1.基础索引&#xff08;类似 Python / NumPy&#xff09; 适用于低维张量&#xff1a;x[i]、x[i, j] x torch.tensor([[10, 11, 12],[13, 14, 15],[16, 17, 18]])print(x[0]) # 第0行: tensor([10…

北京-4年功能测试2年空窗-报培训班学测开-第五十一天

行叭&#xff0c;今天复习第一天&#xff0c;状态效率&#xff0c;差我发现&#xff0c;一旦换了新环境/知识&#xff0c;我就需要重新调整状态&#xff0c;少则一两天&#xff0c;多则一周多。从周日起就很迷茫&#xff0c;哪怕昨天老师讲了简历与面试&#xff0c;我也清楚地知…

虚拟现实的镜廊:当技术成为存在之茧

傍晚&#xff0c;摘下VR头盔的瞬间&#xff0c;房间里未关的台灯竟显得刺眼。指尖划过光滑的塑料外壳&#xff0c;温热的机体还在微微震动&#xff0c;如同某种活物的呼吸。窗外城市的光污染在玻璃上晕染成片&#xff0c;而我的视网膜里仍残留着方才的极光&#xff1a;挪威峡湾…

OSPF过滤

首先需要复习一个点&#xff1a;ACL最终隐含规则不同&#xff1a;如果acl匹配的是流量&#xff0c;则默认是运行所有如果acl匹配的是路由&#xff0c;则默认是拒绝所有OSPF过滤&#xff1a; 1.路由过滤1.LSA可以正常学习&#xff0c;但是不会使用LSA计算路由[AR1]acl 2000[AR1-…

OneCode 3.0 VFS客户端驱动(SDK)技术解析:从架构到实战

引言 在分布式系统架构中&#xff0c;高效的文件管理一直是开发者面临的核心挑战。OneCode 3.0作为新一代微内核引擎&#xff0c;其VFS&#xff08;虚拟文件系统&#xff09;模块通过客户端驱动(SDK)提供了统一的文件操作抽象&#xff0c;屏蔽了底层存储细节&#xff0c;为开发…

@Reusable-组件复用

Reusable组件复用概述&#xff1a;ArkUI布局中&#xff0c;将自定义组件从组件树上移除后放入缓存池&#xff0c;后续在创建相同类型的组件节点时&#xff0c;直接复用缓存池中的组件对象。ArkUI中使用Reusable装饰器以实现自定义组件的复用。常见的组件复用场景是当有大量数据…

黑马点评系列问题之p63unlock.lua不知道怎么整

问题描述&#xff1a;这个位置的这个unlock.lua文件是怎么生成的。老师给的不是很清楚。解决右键单击resources。如图输入回车&#xff0c;然后界面的上方&#xff0c;大概是在这个位置&#xff0c;会有让你引入这个依赖的选项&#xff0c;我的已经没有了。他会出来大概三个选项…

Python爬虫实战:研究Python-Markdown库相关技术

1. 引言 在当今信息爆炸的时代,网络上存在着大量有价值的技术文章。对于技术人员来说,如何高效地收集、整理和保存这些文章是一个重要的问题。爬虫技术可以帮助我们自动从网络上获取所需的文章内容,而 Markdown 作为一种轻量级标记语言,因其简洁的语法和良好的兼容性,成为…

JAVA经典单例模式

前言单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;确保一个类仅有一个实例&#xff0c;并提供全局访问点。它在需要控制资源&#xff08;如数据库连接、配置管理&#xff09;或避免重复创建对象的场景中广泛应用。一&#xff0c;核心概念…