深入理解单元测试与JUnit:从基础概念到实践操作

news2024/9/21 4:34:04

文章目录

  • 前言
  • 一、单元测试是什么?
    • 单元测试的特点
    • 单元测试的好处
  • 二、junit是什么?
  • 三、操作步骤
    • 1.junit安装
    • 2.maven新建项目
    • 3. 新建java文件
    • 4. 生成测试类
    • 5. 编写测试方法
    • 6. 测试结果
  • 总结


前言

随着软件开发行业的不断发展,测试的重要性日益凸显。单元测试作为保证代码质量的基础环节,能够帮助开发者在早期发现并修复潜在的问题。本文将介绍单元测试的基本概念、特点和好处,并深入探讨 Java 语言中的常用单元测试框架——JUnit。通过详细的操作步骤,本文还将指导读者如何在 IntelliJ IDEA 中使用 JUnit 进行测试,从而为项目开发保驾护航。
在这里插入图片描述


一、单元测试是什么?

单元测试是一种软件测试方法,专注于验证程序的最小功能单元是否按照设计要求运行。这些单元通常是函数、方法、类或模块。单元测试的目标是确保每个单元在独立的情况下工作正常,从而为更大规模的集成测试和系统测试打下基础。

单元测试的特点

  1. 独立性:单元测试应该是独立的,不依赖于其他单元或外部资源,如数据库或网络服务。这样可以快速执行测试,并且更容易找到问题的根源。
  2. 细粒度:单元测试聚焦于代码的最小可测试单元,通常是单个方法或函数。这使得问题定位更加精确。
  3. 快速反馈:由于单元测试执行速度快,开发者可以频繁运行测试,以便尽早发现并修复问题。
  4. 自动化:单元测试通常是自动化的,可以通过构建工具或持续集成系统定期执行,以确保代码的稳定性。

单元测试的好处

  1. 提高代码质量:通过编写单元测试,开发者可以更好地理解代码的功能和需求,从而编写更高质量的代码。
  2. 防止回归:单元测试有助于检测代码变更引入的新问题,避免回归错误。
  3. 文档作用:单元测试本身也是一种文档,描述了代码的预期行为和边界情况。
  4. 提高开发效率:虽然编写单元测试需要时间,但从长远来看,它可以节省大量调试和修复问题的时间。

总之,单元测试是软件开发中一种非常重要的实践,它有助于提高软件的质量和稳定性,同时也可以提高开发效率。

二、junit是什么?

JUnit 是一个用于 Java 编程语言的单元测试框架。它是一个开源项目,主要用于测试 Java 应用程序中的代码。JUnit 提供了一种简便的方式来编写和运行测试用例,并且能够帮助开发者确保代码的正确性和稳定性。
以下是 JUnit 的一些关键特点:

  1. 测试注解:JUnit 使用注解(如 @Test、@Before、@After 等)来标记测试方法和设置方法,使测试代码更加简洁和易读。
  2. 断言:JUnit 提供了一系列断言方法(如 assertEquals、assertTrue、assertFalse 等),用于验证测试结果是否符合预期。
  3. 测试套件:可以将多个测试类组合成一个测试套件,以便一次运行多个测试用例。
  4. 集成工具:JUnit 可以与许多构建工具(如 Maven、Gradle)和持续集成工具(如 Jenkins、Travis CI)集成,自动化测试过程。

JUnit 在 Java 开发中非常流行,是许多开发人员和团队进行测试驱动开发(TDD)的重要工具。

三、操作步骤

1.junit安装

打开idea,可在 settings 中的 Plugins 选项卡中的 Installed 一栏中搜索 JUnit 查看是否已经安装,一般是默认安装了插件junit
在这里插入图片描述

2.maven新建项目

点击左上角的file->new->project
在这里插入图片描述

选择maven构建
在这里插入图片描述
输入项目名字与存放的位置,再点击完成
在这里插入图片描述
你就会得到一个这样的模板
在这里插入图片描述
项目根目录下新建 Test 文件夹
在这里插入图片描述
并在 Project Structure 中标记为 Test(默认为 Source),用以保存生成的测试类。标记后,自动生成的测试类都会自动保存在此文件夹下。
在这里插入图片描述
在这里插入图片描述

3. 新建java文件

src/main/java/文件夹下新建一个java文件
在这里插入图片描述
文件名和class类名必须一致
在这里插入图片描述

4. 生成测试类

在需要测试的类上右键 -> 生成 -> 测试,打开生成界面
在这里插入图片描述
在这里插入图片描述
测试库选择junit4,勾选上下面想要测试的单元模块,再点击确定
在这里插入图片描述
选择第一个自己建的Test文件夹
在这里插入图片描述
就会在文件夹下生成一个calTest.java测试模板
在这里插入图片描述

5. 编写测试方法

如果出现了以下情况,说明相关依赖包并不在标准 JDK 中。可以通过把输入光标移到红色的Test上按 alt + enter 键(即 IDEA 自动导包的快捷键)然后选择 Add ‘JUnit4’ to classpath,(如果不行,就手打“@Test”,重复以上操作)
并在之后的下载界面直接选择 “OK” 即可通过 IDEA 自动关联依赖包。
在这里插入图片描述

替换为我已经编写好的单元测试文件,分别对cal.java里的if三种情况进行单元测试,并且测试了边界情况
在这里插入图片描述
在这里插入图片描述

6. 测试结果

点击左侧绿色按钮,在下拉框中选择“RUN”,将会直接运行该方法。选择“Run with coverage...”将会执行该方法并统计覆盖率
在这里插入图片描述
当用例本身预期结果为正确,选择“Run with coverage...”时,运行无误且统计覆盖率
在这里插入图片描述


总结

通过本文的介绍,我们深入探讨了单元测试的基本概念及其重要性。首先,我们了解了单元测试的定义、特点以及其在软件开发中的关键作用。接着,我们介绍了 JUnit 作为 Java 语言的单元测试框架的特点和功能。通过实际操作步骤,我们展示了如何在 IntelliJ IDEA 中配置和使用 JUnit 进行测试,并编写测试用例。本文的内容为提高代码质量和测试覆盖率提供了实用的指导。希望本文能帮助读者更好地理解和实践单元测试方法,提升软件开发过程中的测试效果。如果您有任何疑问或建议,欢迎留言讨论🌹

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

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

相关文章

清华和字节联合推出的视频理解大模型video-SALMONN(ICML 2024)

video-SALMONN: Speech-Enhanced Audio-Visual Large Language Models 论文信息 paper:https://arxiv.org/abs/2406.15704 code:https://github.com/bytedance/SALMONN/ AI也会「刷抖音」!清华领衔发布短视频全模态理解新模型 | ICML 2024 …

Python数值计算(10)——PPoly对象

在scipy中,scipy.interpolate下还有一个PPoly的类,用于表示插值多项式,很多插值算法的结果,都以该类的实例返回,因此有必要了解该类的使用方法。要使用该类,首先要引入相应的模块: from scipy.…

基于docker的 nacos安装部署

一、拉取镜像 拉取nacos官方镜像,这里使用默认命令 docker pull nacos/nacos-server二、创建挂载目录 创建本地的映射文件application.properties mkdir -p /home/docker/nacos/conf /home/docker/nacos/logstouch /home/docker/nacos/conf/application.propert…

举个栗子!Tableau 技巧(280):创建点象限图( Dot Quadrant Chart )

之前分享过 🌰 :四象限图 和 葡萄干布丁图。今天,我们将两者的呈现方式结合起来,创建如下的点象限图( Dot Quadrant Chart ),可以帮助数据粉在有限的看板区域内展示更多的数据信息。 那么,如何在 Tableau 中…

一文弄清Java的四大引用及其两大传递

开场白 Hello大家好呀,我是CodeCodeBond✊最近在复习很多很多的基础知识,有了很多新的感悟~ 话不多说,直接发车✈ 四大引用 问题切入点 在学习 Thread线程利用ThreadLocalMap实现线程的本地内存(变量副本)的时候&…

简单的docker学习 第1章 docker 概述

Docker 学习笔记 本文是b站动力节点docker学习视频的笔记整理,主要用于自己学习复习使用,视频具体地址为 : 动力节点docker 第一章 docker 概述 1.1 课程引人入 1.1.1 开发/运维互掐 ​ 开发与测试和运维间的矛盾,主要是由于环境的不同而…

flutter 做代码混淆

第一种、手动混淆 修改代码中出现次数多的 类目 方法 。修改静态资源的名字,转静态资源为webp 第二种、使用flutter 自带的命令行工具进行混淆 混淆 Dart 代码 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 使用pragma(vm:entry-point) 装饰器修改方…

【界面开发实战】使用DevEco Studio编写支付宝首页

效果展示 知识点 层叠布局 上一篇文章已经介绍了,这篇文章中不再赘述,如果想了解的话可以去看上一篇文章,链接如下: http://t.csdnimg.cn/CnBZMhttp://t.csdnimg.cn/CnBZM 弹性布局 作用:提供更加有效的方式对容器…

YOLOV5 改进:替换backbone为MobileVIT

1. 介绍 yolov5替换主干网络的步骤如下,依旧和之前的一样 2. 更改common文件 将下面代码加入common最下面即可: from einops import rearrange import torch import torch.nn as nn# Transformer Attention模块定义 class TAttention(nn.Module):def __init__(self, dim, …

string的底层简单实现(造轮子)

文件:String.h ----- 头文件 String.cpp ----- 源文件 Test.cpp ----- 源文件 实现细节: 实现带参构造: 在实现带参构造建议不使用初始化列表,初始化去写不太好: :_str(new char[strlen(str)1]) 用初始化列表要在…

如何在 Jupyter Notebook 中直接设置全局随机种子的方法及易错地方、notebook和pycharm中设置随机种子的区别

结论: 在 Jupyter Notebook 中直接设置全局随机种子的方法是确保每个单独的代码块中都调用相同的 set_seed 函数。这是最简单且有效的方法。在每个代码块开头设置随机种子,确保代码在每次执行时具有相同的随机数生成顺序。 易错地方: …

mac配置git的sshkey

在MAC中配置Git的SSH Key: 1.打开终端 2.生成SSH密钥,输入以下命令: ssh-keygen -t rsa -b 4096 -C “你自己的账号电子邮件地址” 按回车键后,系统会提示你输入文件保存路径,默认为~/.ssh/id_rsa直接按回车键使用默…

数据结构初阶之排序(上)

排序的概念及其应用 排序的概念 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的⼤⼩,递增或递减的排列起来的操作。 排序的应用 如下图: 样例数组 下面我们给出一组乱序的数组,接下来的算…

程序员进阶架构知识体系、开发运维工具使用、Java体系知识扩展、前后端分离流程详解、设计模式开发实例汇总专栏分享

场景 作为一名开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。 当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。 作为一名终身学习的信奉者,秉承持续学习、持续优化的信念…

GitHub推出全新AI模型平台:简化开发者体验

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

《计算机网络》(第8版)第8章 互联网上的音频/视频服务 复习笔记

第 8 章 互联网上的音频/视频服务 一、概述 1 多媒体信息的特点 多媒体信息(包括声音和图像信息)最主要的两个特点如下: (1)多媒体信息的信息量往往很大; (2)在传输多媒体数据时&a…

【网络】TCP协议——TCP连接相关、TCP连接状态相关、TCP数据传输与控制相关、TCP数据处理和异常、基于TCP应用层协议

文章目录 Linux网络1. TCP协议1.1 TCP连接相关1.1.1 TCP协议段格式1.1.2 确定应答(ACK)机制1.1.3 超时重传机制 1.2 TCP连接状态相关1.2.1 TIME_WAIT状态1.2.2 CLOSE_WAIT 状态 1.3 TCP数据传输与控制相关1.3.1 滑动窗口1.3.2 流量控制1.3.3 拥塞控制1.3.4 延迟应答1.3.5 捎带应…

草的渲染理论

Unity引擎提供了基础的terrain工具,可以制作地形,在上面刷树刷草。对于树,Unity是支持带LOD的Prefab,不同距离显示不同细节的模型,效果还不错。对于草,Unity支持两种方式来刷草,一种是Add Grass…

汇凯金业:解读区块链概念、类型与独特优势

区块链作为一种具有革命性的创新技术,正在逐渐改变我们的生活和商业模式。它的去中心化、安全可靠、不可篡改等特性,为解决许多传统领域中的问题提供了新的思路和方法。 一、区块链的基本概念 区块链是一种具有创新性的计算机技术应用模式,…