junit组件的使用

devtools/2024/9/20 3:54:02/ 标签: junit

JUnit 是一个广泛使用的 Java 单元测试框架,它帮助开发者编写可重复运行的测试用例来验证代码的正确性。下面是使用 JUnit 进行单元测试的基本步骤和一些关键概念:

安装与配置

  1. 依赖管理:如果你使用的是 Maven 或 Gradle 等构建工具,可以在项目的依赖管理文件中添加 JUnit 的依赖。例如,在 Maven 的 pom.xml 文件中添加如下依赖:

    <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.0</version><scope>test</scope>
    </dependency>
    <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.0</version><scope>test</scope>
    </dependency>
    

    注意:版本号可能会随时间更新,请检查最新版本。

  2. IDE集成:大多数Java IDE(如IntelliJ IDEA, Eclipse)都内置了对 JUnit 的支持,可以直接运行测试。

编写测试

  1. 创建测试类:通常,测试类以 Test 结尾命名,例如 MyClassTest.java,并放在与被测试类相同的包下或专用的测试源目录中。

  2. 使用注解:JUnit 5(也称为 JUnit Jupiter)引入了许多新的注解来标记测试方法、前置条件、后置条件等。

    • @Test:标记一个公共的无参数方法作为测试案例。
    • @BeforeEach:标记一个方法,该方法在每个测试之前运行。
    • @AfterEach:标记一个方法,该方法在每个测试之后运行。
    • @BeforeAll@AfterAll:分别用于标记在所有测试之前和之后运行的方法(这些方法必须是静态的)。
    • @DisplayName:为测试类或测试方法提供更易读的名称。
  3. 编写测试方法:测试方法通常应该简洁明了,专注于测试一个具体的行为。使用断言(Assertions)来验证预期结果与实际结果是否相符。

  4. 断言:JUnit 提供了许多断言方法来比较预期值和实际值,例如:

    • assertEquals(expected, actual):验证实际值是否等于预期值。
    • assertTrue(condition):验证条件是否为真。
    • assertNull(object):验证对象是否为 null。
    • 更多高级断言如 assertThat(actual, matcher),可以使用匹配器来更灵活地验证结果。

运行测试

  • 在 IDE 中,可以直接右键点击测试类或测试方法,选择“运行”来执行测试。
  • 也可以通过构建工具命令行,如 Maven 的 mvn test 或 Gradle 的 gradle test 来运行所有测试。

测试报告

JUnit 在测试完成后会生成测试报告,显示哪些测试通过、哪些失败以及失败的原因。在 IDE 中,这些结果通常会直接显示在测试结果视图中。此外,JUnit 也有与其他报告工具集成的能力,可以生成更详细的HTML或其他格式的测试报告。

以上是使用 JUnit 进行单元测试的基本指南。实际应用中,你可能还会用到参数化测试、测试套件、时间测试等高级特性。

示例:

class TestJunit {@Beforedef before(): Unit = {println("before")}@Testdef test01(): Unit = {println("test01")}
//  before
//  test01
//  after@Afterdef after(): Unit = {println("after")}//  @Test
//  def test02(): Int = {
//    println("test02")
//    10
//  }//java.lang.Exception: Method test02() should be void}

http://www.ppmy.cn/devtools/24499.html

相关文章

JavaEE 初阶篇-深入了解特殊文件(Properties 属性文件、XML)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Properties 属性文件概述 1.1 Properties 属性文件特性与作用 1.2 使用 Properties 把键值对数据写出到属性文件中 1.3 使用 Properties 读取属性文件里的键值对数…

稳扎稳打 部署丝滑 开源即时通讯(IM)项目OpenIM源码部署流程(linux windows mac)

背景 OpenIM包含多个关键组件&#xff0c;每个都是系统功能必不可少的一部分。具体来说&#xff0c;MongoDB 用于持久化存储&#xff1b;Redis 用作缓存&#xff1b;Kafka 用于消息队列&#xff1b;Zookeeper 用于服务发现&#xff1b;Minio 用于对象存储。这些组件的众多可能会…

ChatGPT使用指南:Prompt简单提示词

在使用ChatGPT或其他基于AI的聊天模型时&#xff0c;有效地构建prompt&#xff08;提示词或指令&#xff09;是非常重要的。好的prompt可以帮助模型更准确地理解您的需求&#xff0c;并提供更贴切的回答。以下是一些构建高效prompt的技巧和示例。 1. 明确具体 当您向ChatGPT提…

C# wpf 运行时替换方法实现mvvm自动触发刷新

文章目录 前言一、如何实现&#xff1f;1、反射获取属性2、定义替换方法3、交换属性的setter方法 二、完整代码1、接口2、项目 三、使用示例1、倒计时&#xff08;1&#xff09;、继承ViewModelBase&#xff08;2&#xff09;、定义属性&#xff08;3&#xff09;、属性赋值&am…

TCP协议在物联网中实战

一、TCP协议介绍 网上对TCP协议介绍众多&#xff0c;本人按照自己的理解简单介绍一下。 TCP&#xff08;Transmission Control Protocol&#xff0c; 传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输控制层通信协议。 1.1 协议机制 1.1.1 三次握手 &…

$nextTick源码解析

this.$nextTick 是 Vue.js 内部使用的一个方法,用于在下一个 DOM 更新循环结束之后执行回调函数。 原理: nextTick 方法被调用后,会将回调函数存储在一个队列中Vue.js 会利用浏览器的异步队列机制,在 DOM 更新循环结束后执行这个队列中的所有回调函数。源码: /*** Defer…

LT1964ES5-5 低压差稳压器 200mA 贴片SOT-23-5 使用案例

LT1964ES5-5 微功耗 线性稳压器 LT1964ES5-5 是一款微功耗、低噪声、低dropout的负电压线性稳压器。它的功能是将输入电压转换为稳定的负输出电压&#xff0c;范围在-1.22V到-20V之间&#xff0c;最大输出电流为200mA。该器件特别适用于需要精密调节和低噪声电源的电路中&#…

对象存储服务的事件通知特性

AWS S3提供了事件通知的能力&#xff0c;即在客户应用访问对象存储时&#xff0c;对象存储服务可提供通知服务&#xff0c;支撑客户的特定应用场景&#xff0c;比如业务审计、计费等。 相关能力可参考官方文档。 相关API&#xff0c;如下&#xff1a; PutBucketNotificationGe…

Python AI库pandas读写数据库的应用操作——以sqlite3为例

Python AI库pandas读写数据库的应用操作——以sqlite3为例 本文默认读者具备以下技能&#xff1a; 熟悉python基础知识&#xff0c;vscode或其它编辑工具 已阅读Pandas基础操作文章,了解pandas常见操作 具备自主扩展学习能力 在数据分析和人工智能领域&#xff0c;pandas库和s…

【JS】找出两个数组中的相同元素与不同元素

一、找出相同元素 &#xff08;1&#xff09;方法一 const filterArr (arr1, arr2) > {let result [];for (let i 0; i < arr1.length; i) {for (let j 0; j < arr2.length; j) {if (arr1[i] arr2[j]) {result.push(arr1[i]);}}}return result; };&#xff08;…

基于迁移学习的语义句子分类器(微调一个预训练模型的案例,即迁移学习)

一、任务&#xff1a;基于迁移学习的语义句子分类器 项目介绍&#xff1a;本任务的目的是利用预训练好的模型来微调自己的微软研究释义语料库数据集&#xff0c;实现文本分类的任务&#xff0c;具体是判断两个句子的意思是否相同。在微调阶段&#xff0c;我们将整个模型的参数…

解析Redis Key Prefix配置之谜:双冒号“::”的由来与作用

前言 在使用Spring Boot集成Redis进行应用开发时&#xff0c;为了增强缓存键的可读性和管理性&#xff0c;我们常常会在配置文件中设定一个全局的key-prefix。如果你发现存储至Redis的键自动附加了“::”&#xff0c;本文将深入探讨这一现象背后的原因&#xff0c;解析Spring …

07_for循环返回值while循环

文章目录 1.循环返回值2.yield接收for返回值3.scala调用yield方法创建线程对象4.scala中的while循环5.scala中的流程控制 1.循环返回值 for循环返回值是Unit 原因是防止产生歧义&#xff1b; 2.yield接收for返回值 // 2.yield关键字打破循环&#xff0c;可以使for循环输出…

Linux抓包工具tcpdump

一、tcpdump抓包工具 1.命令格式解析 命令格式&#xff1a;tcpdump option proto dir type proto&#xff08;协议&#xff09; 1.tcp、udp、icmp 2.ip、ipv6 3.arp dir&#xff08;数据的方向 &#xff09; 1.src 192.168.7.130 只抓取源地址是7.130 2.…

Node.js 的 fs 模块分析及其应用

fs 模块&#xff0c;作为 Node.js 平台中的一个核心组件&#xff0c;主要负责处理文件系统相关的操作。该模块提供了一系列用于文件管理的功能&#xff0c;例如文件的读取、写入、更新以及删除等。 应用场景分析 fs 模块的应用范围广泛&#xff0c;下面是一些典型的使用实例&…

基于单片机的机械臂运行轨迹在线控制系统设计

摘要:基于PLC的机械臂运行轨迹控制系统通过PLC采集现场信号及输出信号的状态变化实现机械臂运行轨迹的控制,不能实现多自由度机械臂控制。设计基于单片机的机械臂运行轨迹在线控制系统,系统硬件由上位机PC在线控制、主控制板和机械臂舵机控制板构成,通过光电编码器位移传感…

maven冲突问题

在编写maven当中的依赖时&#xff0c;有时候会出现一些问题&#xff0c;这种问题为Maven的当中的依赖。 在导入依赖的时候&#xff1a;出现了两种依赖发生了版本冲突的问题&#xff1f; <?xml version"1.0" encoding"UTF-8"?> <project xmlns…

1394 笔记

RN节点工作模块&#xff0c;当接收到STOF包后开始计时&#xff0c;当达到节点的发送、接收、数据泵偏移时向应用层发送相应使能。并根据STOF判断CC的错误状态&#xff0c;只有以下条件全部满足时进入正常工作模式&#xff1a; 条件1&#xff0c;STOF消息的帧周期正确&#xff…

Rust的Vec<T>

Vec<T> 是 Rust 编程语言中用于表示动态大小的数组的数据结构。它提供了类似其他语言中动态数组&#xff08;如 C 的 std::vector 或 Python 的 list&#xff09;的功能&#xff0c;允许在运行时高效地添加、删除或修改元素&#xff0c;同时确保内存的有效管理。Vec<T…

GPS时钟服务器(北斗授时设备)助某数据中心项目部署

GPS时钟服务器&#xff08;北斗授时设备&#xff09;助某数据中心项目部署 GPS时钟服务器&#xff08;北斗授时设备&#xff09;助某数据中心项目部署 1.1 项目概述 本次某数据中心时间同步项目中&#xff0c;设计目标是为了满足该数据中心同一区域数万台设备的时间高精度同步要…