Java基础--单元测试

server/2024/9/22 18:22:45/

JUnit是Java中最流行的开源单元测试框架,用于编写和运行可重复的、自动化的单元测试。JUnit极大地简化了测试用例的编写和组织,提供了丰富的断言方法、测试运行控制、测试结果报告等功能,是遵循测试驱动开发(TDD)和持续集成(CI)实践的重要工具。

步骤:

某个系统,有多个业务方法,请使用Junit框架完成对这些方法的单元测试

具体步骤

Junit框架的jar包导入到项目中(注意:IDEA集成了Junit框架,不需要我们自己手工导入了)

编写测试类、测试类方法(注意:测试方法必须是公共的,无参数,无返回值的非静态方法)

必须在测试方法上使用@Test注解(标注该方法是一个测试方法)

在测试方法中,编写程序调用被测试的方法即可。

选中测试方法,右键选择“JUnit运行” ,如果测试通过则是绿色;如果测试失败,则是红色

junit常见注解

Junit 4.xxxx版本

                                                        说明

@Test

测试方法

@Before

用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。

@After

用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。

@BeforeClass

用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。

@AfterClass

用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次

开始执行的方法:初始化资源。

执行完之后的方法:释放资源。

Junit 5.xxxx版本

注解

说明

@Test

测试方法

@BeforeEach

用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。

@AfterEach

用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。

@BeforeAll

用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。

@AfterAll

用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次

基本概念

•测试类:每个测试类通常对应待测试的类或一组相关功能。测试类通常以Test结尾,且需继承junit.framework.TestCase或使用@RunWith(JUnit4.class)注解。

•测试方法:每个测试方法通常对应待测试类的一个具体功能点。测试方法名以test开头,无返回值,且不接受任何参数。测试方法内部使用JUnit提供的断言方法验证实际结果与预期结果是否相符。

•断言(Assertions):JUnit提供了丰富的断言方法,如assertEquals()、assertTrue()、assertNull()等,用于在测试方法中验证程序行为和结果。

•测试运行:JUnit通过junit.textui.TestRunner、IDE集成或构建工具(如Maven、Gradle)提供的插件运行测试。测试结果通常以通过/失败的形式显示,并提供详细的失败信息。

使用方法

1. 添加JUnit依赖:

        在Maven或Gradle项目中添加JUnit依赖。

Maven:

java"><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
</dependencies>

Gradle:

java">dependencies {testImplementation 'junit:junit:4.13.2'
}

2. 创建测试类:

创建一个继承junit.framework.TestCase或使用@RunWith(JUnit4.class)注解的公共类,类名通常以Test结尾。

java">import org.junit.Test;
import static org.junit.Assert.assertEquals;public class MyCalculatorTest {@Testpublic void testAdd() {MyCalculator calculator = new MyCalculator();int result = calculator.add(2, 3);assertEquals(5, result);}
}

3. 运行测试:

在IDE(如IntelliJ IDEA、Eclipse)中右键点击测试类或方法,选择“Run 'XXXTest'”。

也可通过命令行使用mvn test或gradle test运行所有测试。

高级特性

•注解:JUnit 4引入了大量的注解,如@Test、@Before、@After、@BeforeClass、@AfterClass、@Ignore、@Rule、@Parameterized等,用于标记测试方法、设置前置/后置操作、忽略测试、配置规则、参数化测试等。

•断言方法:除了基本的断言方法,JUnit还提供了更复杂的断言,如assertArrayEquals()、assertThat()(配合Hamcrest匹配器)、assertThrows()等,用于验证数组、集合、异常、对象属性等复杂情况。

•测试套件(Test Suite):使用junit.framework.TestSuite或@Suite注解将多个测试类组织成一个测试套件,一次性运行所有相关的测试。

•规则(Rules):JUnit规则(如TemporaryFolder、ExpectedException、ExternalResource等)提供了在测试前后进行资源管理、异常检查、外部资源清理等操作的通用机制。

•参数化测试(Parameterized Tests):使用@RunWith(Parameterized.class)和@Parameters注解,可以创建一组参数化测试用例,每个测试用例使用不同的输入数据运行相同的测试逻辑。

•异常测试:使用@Test(expected = SomeException.class)注解或assertThrows()方法,可以测试特定方法在特定条件下是否抛出预期的异常。

•第三方扩展:JUnit与许多第三方库(如Mockito、PowerMock、AssertJ、TestNG迁移工具等)兼容,可以进一步增强测试功能和易用性。


http://www.ppmy.cn/server/22586.html

相关文章

Vue 组件单元测试深度探索:细致解析与实战范例大全

Vue.js作为一款广受欢迎的前端框架&#xff0c;以其声明式的数据绑定、组件化开发和灵活的生态系统赢得了广大开发者的心。然而&#xff0c;随着项目规模的增长&#xff0c;确保组件的稳定性和可靠性变得愈发关键。单元测试作为软件质量的守护神&#xff0c;为Vue组件的开发过程…

基于Flask的岗位就业可视化系统(一)

前言 本项目综合了基本数据分析的流程&#xff0c;包括数据采集&#xff08;爬虫&#xff09;、数据清洗、数据存储、数据前后端可视化等 推荐阅读顺序为&#xff1a;数据采集——>数据清洗——>数据库存储——>基于Flask的前后端交互&#xff0c;有问题的话可以留言…

Android 在attrs.xml添加属性时出现 Found item Attr/****** more than one time

Android 在attrs.xml添加属性时出现 Found item Attr/****** more than one time 问题描述解决办法方式一方式二 小结 问题描述 在Android应用开发过程中&#xff0c;经常需要自定义控件&#xff0c;并且定义控件的属性&#xff0c;方便灵活的修改控件的显示样式&#xff0c;提…

【数据结构】单链表

单链表 文章目录 单链表定义单链表的优缺点用代码定义单链表初始化单链表不带头结点的单链表带头结点的单链表 单链表的插入按位序插入&#xff08;带头结点&#xff09;指定结点的后插操作指定结点的前插操作 单链表的删除按位序删除&#xff08;带头节点&#xff09;删除指定…

[NeurIPS-23] GOHA: Generalizable One-shot 3D Neural Head Avatar

[pdf | proj | code] 本文提出一种基于单图的可驱动虚拟人像重建框架。基于3DMM给粗重建、驱动结果&#xff0c;基于神经辐射场给细粒度平滑结果。 方法 给定源图片I_s和目标图片I_t&#xff0c;希望生成图片I_o具有源图片ID和目标图片表情位姿。本文提出三个分支&#xff1a;…

C语言-atoi和atof函数的使用

人生应该树立目标&#xff0c;否则你的精力会白白浪费。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;知识回顾 &#x1f34b;知识点一&#xff1a;atoi函数的使用和实现 • &#x1f330;1.函数介绍 • &#x1f330;2.代码演示 • &#x1f330;3.atoi函数的…

002 springboot redis 防止表单重复提交

文章目录 RedisConfig.javaWebConfiguration.javaAutoIdempotentTokenController.javaMyOrderController.javaMyOrder.javaAutoIdempotentInterceptor.javaAutoIdempotentIdempotentTokenService.javaIdempotentTokenServiceImpl.javaSpringbootRedisDemoApplication.javaappli…

【MySQL】1.安装与配置

目录 1.数据库介绍 1.1什么是数据库 1.2数据库分类 2.MySQL服务器安装 2.1Windows绿色安装 2.2Windows中重装MYSQL 3.Mac中常见的安全问题 4.客户端连接MYSQL服务器 5.SQL的分类 1.数据库介绍 1.1什么是数据库 文件保存数据有以下的缺点&#xff1a; 文件的安全性问…