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/

相关文章
|
2天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
8 2
|
9天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
17 5
|
27天前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
34 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
14天前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
26 1
|
26天前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
41 7
|
25天前
|
分布式计算 Java 大数据
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
29 0
|
2月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
69 6
|
30天前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
17 0
|
3月前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
58 2
|
3月前
|
XML Java 测试技术
Selenium WebDriver自动化测试(基础篇):不得不掌握的Java基础
关于Selenium WebDriver自动化测试的Java基础篇,涵盖了Java的变量、数据类型、字符串操作、运算符、流程控制、面向对象编程、关键字用法、权限修饰符、异常处理和IO流等基础知识点,为进行自动化测试提供了必要的Java语言基础。
95 1