当前位置: 首页 > news >正文

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.lryc.cn/news/588848.html

相关文章:

  • 静态补丁脚本 - 修改 libtolua.so
  • MySQL数据库----约束
  • 开源工具与框架:基于.NET Core 的 Modbus 网关开发(一)
  • 硬件与软件的桥梁:冯诺依曼体系、操作系统和初始进程的深度解析
  • 【目标追踪】MUTR3D: A Multi-camera Tracking Framework via 3D-to-2D Queries
  • S7-200 SMART PLC:不同CPU及数字量 IO 接线全解析
  • AUTOSAR进阶图解==>AUTOSAR_SWS_FlexRayISOTransportLayer
  • 读书笔记5:交易在供应链中的关键作用
  • AI产品经理面试宝典第20天:AI+金融场景相关面试题及回答指导
  • C#,List<T> 与 Vector<T>
  • 【记录】Ubuntu20.04安装mysql
  • k8s之Snapshots 详解
  • Apifox 和 Apipost如何选?2025企业API开发工具选型需求分析及建议
  • 前端打包自动压缩为zip--archiver
  • SpringBoot 2.x→3.0升级实战:Jakarta EE兼容性改造清单
  • Flink双流实时对账
  • GaussDB 数据库架构师修炼(三) 集群管理概览
  • 数据结构--树(1)
  • 同样是“跳转”,为何forward地址栏不变,redirect会变?
  • 20250715给荣品RD-RK3588开发板刷Android14时打开USB鼠标
  • MATLAB知识点总结
  • 物联网设备管理工具实战:用AR运维镜击穿6.8天修复魔咒
  • 构建企业级项目管理全面数字化运营体系︱易趋(蓝云软件)总裁唐智勇
  • 学习C++、QT---26(QT中实现记事本项目实现文件路径的提示、现在我们来学习一下C++类模板、记事本的行高亮的操作的讲解)
  • 【PDF识别改名】使用京东云OCR完成PDF图片识别改名,根据PDF图片内容批量改名详细步骤和解决方案
  • pytorch学习笔记(四)-- TorchVision 物体检测微调教程
  • sundog公司的SilverLining SDK库实现3d动态云层和下雨、下雨、雨夹雪效果
  • 终端安全管理系统为什么需要使用,企业需要的桌面管理软件
  • Java 异常处理详解:从基础语法到最佳实践,打造健壮的 Java 应用
  • Spring Boot目录变文件夹?3步解决!