当前位置: 首页 > 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://affrontedly.ciuzn.cn
http://asper.ciuzn.cn
http://batrachian.ciuzn.cn
http://ahitophal.ciuzn.cn
http://adamantine.ciuzn.cn
http://atheneum.ciuzn.cn
http://capitulant.ciuzn.cn
http://carload.ciuzn.cn
http://bestrid.ciuzn.cn
http://appallingly.ciuzn.cn
http://capo.ciuzn.cn
http://address.ciuzn.cn
http://capsulotomy.ciuzn.cn
http://acls.ciuzn.cn
http://barbuda.ciuzn.cn
http://cholecystagogue.ciuzn.cn
http://actor.ciuzn.cn
http://biconcave.ciuzn.cn
http://aca.ciuzn.cn
http://abstemious.ciuzn.cn
http://antiquarianize.ciuzn.cn
http://chiller.ciuzn.cn
http://caput.ciuzn.cn
http://acushla.ciuzn.cn
http://almsfolk.ciuzn.cn
http://adream.ciuzn.cn
http://ark.ciuzn.cn
http://argentum.ciuzn.cn
http://bathtub.ciuzn.cn
http://barquentine.ciuzn.cn
http://www.dtcms.com/a/280689.html

相关文章:

  • 使用 Java 获取 PDF 页面信息(页数、尺寸、旋转角度、方向、标签与边框)
  • 已知均数与标准差,如何生成一组正态分布数据?
  • EPLAN 电气制图(九):直流电源绘制+端子排绘制
  • 线程(二) linux 互斥
  • JVM——有哪些常见的垃圾收集器
  • Props
  • 时序数据库与AI的融合:智能时代的数据基石
  • 027_国际化与本地化
  • Spring应用抛出NoHandlerFoundException、全局异常处理、日志级别
  • FreeRTOS学习笔记——移植说明、任务创建
  • 【Ubuntu22.04】repo安装方法
  • Linux715 磁盘管理:逻辑卷
  • 聊聊MySQL中的buffer pool
  • Spring Boot目录变文件夹?3步解决!
  • Unity Editor下拉框,支持搜索,多层级
  • BGP服务器和多线服务器的不同之处
  • Python初学者笔记第十三期 -- (常用内置函数)
  • 原点安全签约金网络数科,共建一体化数据安全防护体系
  • Docker 镜像(Image)常用命令总结
  • ASP .NET Core 8结合JWT轻松实现身份验证和授权
  • CMake基础:覆盖项目开发的五大配套工具
  • LLM面试题及讲解 4
  • VSCode同时支持Vue2和Vue3开发的插件指南
  • 【编程】-环形缓冲区
  • 安全参綉25暑假第一次作业
  • 超详细 anji-captcha滑块验证uniapp微信小程序前端组件
  • 备忘录设计模式
  • asyncio 与 uvloop
  • 策略设计模式分析
  • 如何将华为文件传输到电脑