Java测试三两事

简介: Java测试三两事

测试

Java的单元测试和集成测试是非常重要的。

集成测试

在所有组件都开发完成进行组装测试(所有对应的类都会建立实例来运行程序)。

单元测试

集成测试会构建整个Spring Context,这表示所有声明的bean,都会构建实例。在开发时,为了实现测试的高效,或是定点测试,需要使用Mock技术来屏蔽掉下层的依赖。


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


单元测试有什么好处呢?在学习单元测试前,我们可以先了解一下测试驱动开发。


**所谓测试驱动开发,是指先编写接口,紧接着编写测试。**编写完测试后,我们才开始真正编写实现代码。在编写实现代码的过程中,一边写,一边测,什么时候测试全部通过了,那就表示编写的实现完成了:


即:编写接口-编写测试-编写实现-运行测试(测试失败回退到 编写实现)-任务完成。

Java单元测试主要使用Junit(本文以Junit5为例)。

Junit5

介绍

JUnit 5 与以前版本的 JUnit 不同,拆分成由三个不同子项目的几个不同模块组成。

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

  • JUnit Platform: 用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持。
  • JUnit Jupiter:包含 JUnit 5 新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码。


  • JUnit Vintage:用于在JUnit 5 中兼容运行 JUnit3.x 和 JUnit4.x 的测试用例。

它的架构如下:

520f9cb5cfb24d232666b1b1071c1b81.png

  • @Test:Junit会将带有@Test的方法识别为测试方法;
  • @BeforeEach和AfterEach,会在运行每个Test方法前后自动运行,因此可以将一些公共的代码段(如实例)设置为以上注解,以便代码格式优美;

PS:其实在Junit的内部运行顺序伪代码如下:

5295c9a634292661b5bab02f6ad8ab0e.png

  • 即beforeeach和aftereach会环绕在每个test前后。

与之类似的还有,after/before all/class,即在所有test方法或者类之前执行。

  • @Disable:可以跳过这个测试(在结果中会显示skipped);

EnableOnOs:可以在指定的系统上运行特定的测试;

  • @ParameterizedTest:用于参数化测试;
  • DisplayName:可以在测试过程中输出方法的别名;
  • ValueSource\EnumSource\MethodSourceCsvSource\ArgumentsSource:可以实现相应内容的注入;

参考链接

单元测试Junit简要例子

https://www.liaoxuefeng.com/wiki/1252599548343744/1255945269146912

Junit5介绍

https://www.jianshu.com/p/3183fb69fd74

SpringBoot集成mybatis

源码:https://www.jianshu.com/p/426dbf8cc64e

Mockito

介绍

Mockito框架是基于将依赖的类设置为**Mock类,**进行单元测试。

何为Mock?

——当测试目标的下层依赖的行为是可预期的,那么测试目标本身的行为也是可以预期的。于是所谓测试就是把实际的结果和测试目标的预期结果做比较,而Mock就是预先设定下层依赖的行为表现

Mock的流程就是:


  1. 将测试目标的依赖对象进行mock,设定其预期的行为表现。
  2. 对测试目标进行测试。
  3. 检测测试结果,检查在依赖对象的预期行为下,测试目标的结果是否符合预期。

我们使用Mockito,主要是生产mock对象,以及,使用mock所提供的一些方法来验证结果的正确性。

参考链接

Mockito简单上手

http://ifeve.com/%E4%B8%80%E6%96%87%E8%AE%A9%E4%BD%A0%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B-mockito-%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6/

相关文章
|
1月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
231 0
|
6月前
|
缓存 监控 负载均衡
如何提升 API 性能:来自 Java 和测试开发者的优化建议
本文探讨了如何优化API响应时间,提升用户体验。通过缓存(如Redis/Memcached)、减少数据负载(REST过滤字段或GraphQL精确请求)、负载均衡(Nginx/AWS等工具)、数据压缩(Gzip/Brotli)、限流节流、监控性能(Apipost/New Relic等工具)、升级基础设施、减少第三方依赖、优化数据库查询及采用异步处理等方式,可显著提高API速度。快速响应的API不仅让用户满意,还能增强应用整体性能。
|
2月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
121 0
|
2月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
11月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
143 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
10月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
1631 2
|
11月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
189 5
|
11月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
348 1
|
11月前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
202 7
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
208 6