一文详解Java单元测试Junit

文章目录

  • 概述、Junit框架快速入门
    • 单元测试概述
    • main方法测试的问题
    • junit单元测试框架
      • 优点:
      • 使用步骤:
  • 使用案例
    • 包结构
  • Junit框架的常见注解
    • 测试

概述、Junit框架快速入门

单元测试概述

  • 就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试。

main方法测试的问题

  • 只能在main方法编写测试代码,去调用其他方法进行测试

  • 无法实现自动化测试,一个方法测试失败,可能影响其他方法的测试

  • 无法得到测试报告,需要程序员自己去观察测试是否成功

junit单元测试框架

  • 可以对方法进行测试,它是第三方公司开源出来的(IDEA工具以集成)

优点:

  • 可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立

  • 不需要程序员分析测试的结果,会自动生成测试报告出来

  • 使用断言机制,通过预测程序的结果来判断程序是否出错

使用步骤:

  1. 将Junit框架的jar包导入项目中(IDEA已集成,不需要手动导入)

  2. 为需要测试的业务类,定义对应的测试类,并为每个业务方法,编写对应的测试方法(必须:公共,无参,无返回值)

  3. 测试方法上声明@Test注解,然后进行测试,测试方法建议使用test开头

使用案例

源码地址:Junit测试源码

包结构

在这里插入图片描述

步骤二:编写业务类

//定义一个字符串工具类
public class StringUtil {public static void printNumber(String str){if (str == null){System.out.println(0);return;}System.out.println("字符串的长度是:"+ str.length());}/*** 获取字符串的最大索引* @param str* @return*/public static int getMaxIndex(String str){if(str == null){return -1;}return str.length();}

步骤三:为业务类生成测试类,测试类代码如下

public class StringUtilTest {@Test   //爆红按Crtl+回车public void testPrintNumber(){StringUtil.printNumber("1234567890");StringUtil.printNumber(null);}@Testpublic void testGetMaxIndex(){System.out.println(StringUtil.getMaxIndex("12345"));System.out.println(StringUtil.getMaxIndex(null));System.out.println(StringUtil.getMaxIndex(""));Assert.assertEquals(StringUtil.getMaxIndex("12345"), 4);}

在这里插入图片描述

可以看到,我们方法的本意是想输出最大索引,但是如果我们使用系统输出很可能会检测不出来,但是我们用断言就可以检测出来,所以要去修改代码

在这里插入图片描述

Junit框架的常见注解

注解说明
@Test测试类中的方法必须由这个注解修饰才能成为测试方法
@Before用来修饰一个实例方法,该方法会在每个测试方法执行之前执行一次
@After用来修饰一个实例方法,该方法会在每个测试方法执行之后执行一次
@BeforeClass用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次
@AfterClass用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次
  • 在测试方法执行之前执行的方法常用于:初始化资源

  • 在测试方法执行完成之后执行的方法常用于:释放资源

测试

    @Beforepublic void testBefore(){System.out.println("实例方法:Before");}@Afterpublic void testAfter(){System.out.println("实例方法:After");}@BeforeClasspublic static void testBeforeClass(){System.out.println("实例方法:BeforeClass");}@AfterClasspublic static void testAfterClass(){System.out.println("实例方法:AfterClass");}实例方法:BeforeClass
实例方法:Before
字符串的长度是:10
实例方法:After
实例方法:Before
最大索引为:4
实例方法:After
实例方法:AfterClass

测试完成

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

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

相关文章

nginx配置自动压缩-gzip压缩

1.nginx配置文件 server里添加gzip配置信息。 重启nginx服务 对比效果:上图是没有开启gzip自动压缩,总共资源是1.3M,传输1.3MB,下图是开启gzip压缩,总共资源是1.3M,传输了973KB。

图的遍历(深度优先遍历 + 广度优先遍历)

目录 🌼广度优先遍历 (1)邻接矩阵BFS (2)邻接表BFS (3)非连通图BFS (4)复杂度分析 🌼深度优先遍历 (1)邻接矩阵的DFS &#x…

【Linux】地址空间

本片博客将重点回答三个问题 什么是地址空间? 地址空间是如何设计的? 为什么要有地址空间? 程序地址空间排布图 在32位下,一个进程的地址空间,取值范围是0x0000 0000~ 0xFFFF FFFF 回答三个问题之前我们先来证明地址空…

2024黑龙江省职业院校技能大赛信息安全管理与评估赛项规程

2024黑龙江省职业院校技能大赛暨国赛选拔赛 “GZ032信息安全管理与评估”赛项规程 极安云科专注技能竞赛,包含网络建设与运维和信息安全管理与评估两大赛项,及各大CTF,基于两大赛项提供全面的系统性培训,拥有完整的培训体系。团队…

JVS低代码表单引擎:数据校验与处理的先锋

随着信息技术的迅速发展,数据校验与处理已经成为了各类应用中不可或缺的一环。尤其是在涉及敏感信息,如密码处理时,其安全性和准确性显得尤为重要。JVS低代码表单引擎提供了强大的文本组件触发逻辑校验功能,它能够在用户填写数据的…

网贷教父判无期,千家万户哭成狗

作者|翻篇 新熔财经快评: 真是太气人了 e租宝崩盘后 比它更大的雷又来了 “网贷教父”周世平 非法吸收公众存款1090亿 被判了无期 48万多人的血汗钱啊 就这样血本无归了 要知道 当年周世平做p2p 就靠着全额垫付 这颗定心丸 大量的宝妈 上…

Elasticsearch:什么是检索增强生成 (RAG)?

检索增强生成 (RAG) 定义 检索增强生成 (RAG) 是一种利用来自私有或专有数据源的信息来补充文本生成的技术。 它将旨在搜索大型数据集或知识库的检索模型与大型语言模型 (LLM) 等生成模型相结合,后者获取该信息并生成可读的文本响应。 检索增强生成可以通过添加来…

react-photo-view 的介绍、安装、使用。

目录 基本介绍 安装 使用 基本介绍 react-photo-view 是一个基于 React 的图片查看器组件,用于在网页上展示和浏览图片。该组件提供了用户友好的界面和交互,可以轻松地在应用程序中集成并使用。 支持触摸手势,拖动/平移/物理效果滑动…

读书笔记-《数据结构与算法》-摘要2[冒泡排序]

冒泡排序 核心:冒泡,持续比较相邻元素,大的挪到后面,因此大的会逐步往后挪,故称之为冒泡。 public class BubbleSort {public static void main(String[] args) {int unsortedArray[] new int[]{6, 5, 3, 1, 8, 7, 2…

深入探讨Guava的缓存机制

第1章:引言 大家好,我是小黑,今天咱们聊聊Google Guava的缓存机制。缓存在现代编程中的作用非常大,它能提高应用性能,减少数据库压力,简直就是性能优化的利器。而Guava提供的缓存功能,不仅强大…

Linux 压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

目录 1、使用 tar 命令: 1.1. 压缩: 1.2. 解压: 1.3. tar 命令各参数含义 2. gzip、gunzip gzip 命令: 压缩文件: 保留原始文件,创建压缩文件: 保留原始文件,显示压缩进度&…

正则表达式(7):转义符

正则表达式(7):正则表达式(5):转义符 本博文转载自 此处,我们来认识一个常用符号,它就是反斜杠 “\” 反斜杠有什么作用呢?先不着急解释,先来看个小例子。 …

golang使用es,报错Elasticsearch health check failed

今天golang代码里调用es,结果一直报错。报错内容 ElasticsearchRestHealthIndicator : Elasticsearch health check failed然后又去es管理端看,明明节点是绿色的,估计是golang的这个有问题,时间紧迫,我就直接关掉了健…

侯捷C++ 程序的生前死后

生前:CRT startup code 看完课程,能够回答一下问题: C进入点是main()嘛?什么代码比main更早执行?什么代码在main结束后执行?为什么上述代码可以如此行为?Heap的结构如何?I/O的结构…

日志门面slf4j和各日志框架

简介 简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架, 其主要意义在于提供接口,具体的实现可以交由其他日志框架,如log4j、logback、log4j2。 对于一般的Java项目而言&#xff…

元宇宙vr党建云上实景展馆扩大党的影响力

随着科技的飞速发展,VR虚拟现实技术已经逐渐融入我们的日常生活,尤其在党建领域,VR数字党建展馆更是成为引领红色教育新风尚的重要载体。今天,就让我们一起探讨VR数字党建展馆如何提供沉浸式体验,助力党建工作创新升级…

轻量封装WebGPU渲染系统示例<43>- PBR材质与阴影实(源码)

原理简介: 1. 基于rendering pass graph实现。 2. WGSL Shader 基于文件系统和宏机制动态组装。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/PBRShadowTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&a…

【C语言】【数据结构】自定义类型:结构体

引言 这是一篇对结构体的详细介绍,这篇文章对结构体声明、结构体的自引用、结构体的初始化、结构体的内存分布和对齐规则、库函数offsetof、以及进行内存对齐的原因、如何修改默认对齐数、结构体传参进行介绍和说明。 ✨ 猪巴戒:个人主页✨ 所属专栏&am…

手机升级到iOS15.8后无法在xcode(14.2)上真机调试

之前手机是iOS14.2的系统,在xcode上进行真机测试运行良好,因为想要使用Xcode的Instruments功能,今天将系统更新到了iOS15.8 ,结果崩了 说是Xcode和手机系统不兼容不能进行真机测试。在网上查了好些方法,靠谱的就是下载相关版本的…

Centos7云服务器上安装cobalt_strike_4.7。附cobalt_strike_4.7安装包

环境这里是阿里的一台Centos7系统。 开始安装之前首先要确保自己安装了java11及以上环境。 安装java11步骤: sudo yum update sudo yum install java-11-openjdk-devel把服务器端(CS工具分服务器端和客户端)的CS安装到服务器上后给目录下的…