Java基础教程(16)-Java单元测试

简介: 【4月更文挑战第16天】单元测试是针对Java程序中的单个方法进行的测试,常用的单元测试框架是JUnit,它支持断言、组织和运行测试。编写单元测试时,应保证代码简洁、测试独立并涵盖边界条件。在IDEA中,可以通过快捷方式生成测试类。JUnit的`@Test`注解标识测试方法,`@BeforeEach`和`@AfterEach`分别在每个测试前后的执行。`@BeforeAll`和`@AfterAll`则在所有测试前后的执行,适用于静态变量初始化和清理。`@Disabled`用于临时禁用测试,`@ParameterizedTest`配合`@ValueSource`可实现参数化测试。

什么是单元测试

单元测试就是针对最小的功能单元编写测试代码。Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。

JUnit

JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。JUnit是事实上的单元测试的标准框架;几乎所有的IDE工具都集成了JUnit;

一个JUnit测试包含若干 @Test 方法,并使用 Assertions 进行断言;

单元测试可以确保单个方法按照正确预期运行,如果修改了某个方法的代码,只需确保其对应的单元测试通过,即可认为改动正确。此外,测试代码本身就可以作为示例代码,用来演示如何调用该方法。

使用JUnit进行单元测试,我们可以使用断言( Assertion )来测试期望结果,可以方便地组织和运行测试,并方便地查看测试结果。此外,JUnit既可以直接在IDE中运行,也可以方便地集成到Maven这些自动化工具中运行。

在编写单元测试的时候,我们要遵循一定的规范:

  • 一是单元测试代码本身必须非常简单,能一下看明白,决不能再为测试代码编写测试;
  • 二是每个单元测试应当互相独立,不依赖运行的顺序;
  • 三是测试时不但要覆盖常用测试用例,还要特别注意测试边界条件,例如输入为 0 , null ,空字符串 "" 等情况

在IDEA中创建测试类:

  • 打开实现类,对着方法右键
  • 选go to找到test
  • 要勾选的选项,在勾选完需要测试的方法后,点击OK;

在这里插入图片描述

import static org.junit.jupiter.api.Assertions.*;

class BoxTest {
   
   

    @org.junit.jupiter.api.BeforeEach
    void setUp() {
   
   
    }

    @org.junit.jupiter.api.AfterEach
    void tearDown() {
   
   
    }

    @org.junit.jupiter.api.Test
    void getWh() {
   
   
    }
}

JUnit会把带有 @Test 的方法识别为测试方法; 标记为 @BeforeEach 和 @AfterEach 的方法,它们会在运行每个 @Test 方法前后自动运行;
JUnit还提供了 @BeforeAll 和 @AfterAll ,它们在运行所有@Test前后运行; @BeforeAll 和 @AfterAll 也只能标注在静态方法上;

  • 对于实例变量,在 @BeforeEach 中初始化,在 @AfterEach 中清理,它们在各个 @Test 方法中互不影响,因为是不同的实例;

  • 对于静态变量,在 @BeforeAll 中初始化,在 @AfterAll 中清理,它们在各个 @Test 方法中均是唯一实例,会影响各个 @Test 方法

其他注解

排出某些 @Test 方法,不要让它运行,这时,我们就可以给它标记一个 @Disabled;类似 @Disabled 这种注解就称为条件测试,JUnit根据不同的条件注解,决定是否运行当前的 @Test 方法;

为什么我们不直接注释掉 @Test ,而是要加一个 @Disabled ?这是因为注释掉 @Test ,JUnit就不知道这是个测试方法,而加上 @Disabled ,JUnit仍然识别出这是个测试方法,只是暂时不运
行。

JUnit提供了一个 @ParameterizedTest 注解,搭配@ValueSource,用来进行参数化测试。

参数化测试和普通测试稍微不同的地方在于,一个测试方法需要接收至少一个参数,然后,传入一组参数反复运行。

相关文章
|
1月前
|
Oracle Java 关系型数据库
Java 简单教程
Java是跨平台、面向对象的编程语言,广泛用于企业开发、Android应用等。本教程涵盖环境搭建、基础语法、流程控制、面向对象、集合与异常处理,助你快速入门并编写简单程序,为进一步深入学习打下坚实基础。
321 0
|
2月前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
239 10
|
2月前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
2月前
|
监控 测试技术 API
n8n自动化测试教程 (1):环境搭建与初识n8n
n8n是一款开源、可视化的工作流自动化工具,测试工程师可通过拖拽节点快速构建API测试流程,实现测试编排、数据管理、自动化监控与告警等功能,提升测试效率与覆盖率。
|
3月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
883 10
|
3月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
486 3
|
3月前
|
JSON 安全 测试技术
什么是API接口测试?这可能是全网最全的教程了!
API 是应用程序间的“中间人”,用于实现通信和数据交换。随着微服务架构的普及,API 数量激增,其质量对系统稳定性至关重要。API 测试可验证功能、性能与安全性,帮助开发者在部署前发现并修复问题,提升系统可靠性。测试内容包括请求方法、URL、请求头、请求体、响应状态码与响应数据等。常用工具如 Postman、AREX 可辅助测试,确保 API 在不同场景下的正确性与稳定性。
|
3月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
437 0
|
4月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
208 0
|
4月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。