一文详解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.mzph.cn/news/207428.shtml

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

相关文章

ROS rosbag

在ROS中的rosbag是一个命令行工具,主要用于记录、回放和分析rostopic中的数据。它可以将指定rostopic中的数据记录到.bag后缀的数据包中,以便于进行离线分析和处理。 在ROS系统中,rosbag可以通过命令行工具或ROS节点来使用。 通过rosbag命令…

数字图像处理(实践篇)十九 漫水填充

目录 一 漫水填充算法--FloodFill 二 涉及的函数 三 实践 一 漫水填充算法--FloodFill FloodFill漫水填充算法就是选中与种子点相连接的区域,利用指定颜色进行区域颜色填充。可以通过设置连通方式或像素的范围控制填充的效果。通常是用来标记或者分离图像的一部…

进程地址空间

引入地址空间 静态变量和栈空间变量 静态变量默认是被初始化的 存放在初始化和为初始化空间中 static已经变成了全局变量 命令行参数和环境变量的增长方向 这里观察的是命令行参数和环境变量的地址 观察命令行和环境变量表的地址 进程地址空间 如果他们是同一块儿空间&am…

用AI来纠正错别字和修饰文字

▲ 搜索“大龙谈智能内容”关注GongZongHao▲ 在使用谷歌翻译或百度翻译将英语翻译成中文时,有些句子读起来不太流畅。我尝试使用AI来帮助我修改翻译后的中文,希望能让句子更符合中文习惯。 使用百度文心一言尝试一下。 文心一言的链接是这个&#x…

VUE3给table的head添加popover筛选、时间去除时分秒、字符串替换某字符

1. VUE3给table的head添加popover筛选 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…

谷歌Gemini刚发就惹质疑:测试标准有失偏颇,效果视频疑似剪辑

梦晨 克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 谷歌憋了许久的大招&#xff0c;双子座Gemini大模型终于发布&#xff01;其中一图一视频最引人注目&#xff1a; 一图&#xff0c;MMLU多任务语言理解数据集测试&#xff0c;Gemini Ultra不光超越GPT-4&#xff0c;甚至超越了…

实战干货!基于ERNIE Bot SDK的数字诗人聊天开发教程

随着人工智能技术的不断迭代发展&#xff0c;数字人的开发与应用需求也与日俱增&#xff0c;并且随着大语言模型的发展&#xff0c;数字人也更智能&#xff0c;从最初的语音预制到现在的实时交流&#xff0c;目前已在很多场景都有广泛应用。 虚拟客服&#xff1a;数字人可以通…

【EMNLP 2023】基于知识迁移的跨语言机器阅读理解算法

近日&#xff0c;阿里云人工智能平台PAI与华南理工大学朱金辉教授团队、达摩院自然语言处理团队合作在自然语言处理顶级会议EMNLP2023上发表基于机器翻译增加的跨语言机器阅读理解算法X-STA。通过利用一个注意力机制的教师来将源语言的答案转移到目标语言的答案输出空间&#x…

计算机网络高频面试八股文

目录&#xff1a; 网络分层结构三次握手两次握手可以吗&#xff1f;四次挥手第四次挥手为什么要等待2MSL&#xff1f;为什么是四次挥手&#xff1f;TCP有哪些特点&#xff1f;说说TCP报文首部有哪些字段&#xff0c;其作用又分别是什么&#xff1f;TCP和UDP的区别&#xff1f;…

套接字应用程序

这章节是关于实现 lib_chan 库的 。 lib_chan 的代码在 TCP/IP 之上实现了一个完整的网络层&#xff0c;能够提供认证和Erlang 数据流功能。一旦理解了 lib_chan 的原理&#xff0c;就能量身定制我们自己的通信基础结构&#xff0c;并把它叠加在TCP/IP 之上了。 就lib_chan 本身…

MMLM之Gemini:《Introducing Gemini: our largest and most capable AI model》的翻译与解读

MMLM之Gemini&#xff1a;《Introducing Gemini: our largest and most capable AI model》的翻译与解读 导读&#xff1a;2023年12月6日&#xff0c;Google重磅发布大规模多模态模型Gemini&#xff0c;表示了Google语言模型发展到了一个新阶段&#xff0c;其多模态和通用能力明…

中断、异常和系统调用(2-1,2-2,2-3)

2-1 课堂练习2.1&#xff1a;外部中断 本实训分析 Linux 0.11 对外部中断的响应和处理过程。在每条指令执行的末尾&#xff0c;如果没有关中断&#xff0c;CPU 会检查是否收到了外部中断信号&#xff0c;如果有信号&#xff0c;则 CPU 就切换到核心态去执行对应的中断处理程序…

DHTMLX Scheduler PRO 6.0.5 Crack

功能丰富的 JavaScript调度程序 DHTMLX Scheduler 是一个 JavaScript 日程安排日历&#xff0c;具有 10 个视图和可定制的界面&#xff0c;用于开发任何类型的日程安排应用程序。 DHTMLX JS 调度程序库的主要特性 我们的 JS 调度程序最需要的功能之一是时间轴视图。借助时间轴…

【语义分割数据集】——imagenet语义分割

地址&#xff1a;https://github.com/LUSSeg/ImageNet-S 1 例图 2. 类别和数量信息 疑问 根据原文的描述&#xff1a;Based on the ImageNet dataset, we propose the ImageNet-S dataset with 1.2 million training images and 50k high-quality semantic segmentation annot…

【JNPF】好用、高性价比的低代码开发平台

目录 1.JNPF介绍 突出优势 2.JNPF的开放性与扩展性 平台的开放性&#xff1a; 平台高拓展性 在快速发展的软件开发领域&#xff0c;低代码平台已经成为了一种重要的开发方法&#xff0c;它使非专业开发人员也能够参与到软件开发中去&#xff0c;大大加速了软件开发的效率。…

Leetcode—2034.股票价格波动【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—2034.股票价格波动 算法思想 实现代码 class StockPrice { public:int last 0;multiset<int> total;unordered_map<int, int> m;StockPrice() {}void update(int timestamp, int price) {if(m.count(time…

VUE学习一、环境的安装

1.node.js安装 node.js是前端依赖的环境, 类似于java中的jdk 下载地址 node.js 下载 msi文件 下完就是一顿嘎嘎安装 , 安装后可以cmd看看node和npm的版本 1.2 yarn的安装 Yarn是Facebook最近发布的一款依赖包安装工具。Yarn是一个新的快速安全可信赖的可以替代NPM的依赖管…

计算机图形学——消隐算法

目录 消隐算法 &#xff08;1&#xff09;隐藏线消除算法 &#xff08;2&#xff09;隐藏面消除算法 曲面体消隐算法 3D Mesh 隐藏面消除算法 &#xff08;1&#xff09;深度缓冲器算法&#xff08;zBuffer&#xff09; 深度缓冲器 &#xff08;2&#xff09;深度排序…

SpringBoot的监控(Actuator) 功能

目录 0、官方文档 一、引入依赖 二、application.yml文件中开启监控 三、具体使用 四、具体细节使用 五、端点开启与禁用 六、定制Endpoint 1. 定制 /actuator/health 2. 定制 /actuator/info &#xff08;1&#xff09;直接在配置文件中写死 &#xff08;2&#xff…

如何进行代码混淆?方法与常见工具介绍

​ 目录 什么是代码混淆&#xff1f; 代码混淆的方法 常见代码混淆工具 什么是代码混淆&#xff1f; 代码混淆是指将计算机程序的代码转换成一种功能上等价&#xff0c;但难于阅读和理解的形式的行为。混淆后的代码很难被反编译&#xff0c;即使反编译成功也很难得出程序的…