《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(2)

简介: 《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(2)

接上篇:https://developer.aliyun.com/article/1227490?spm=a2c6h.13148508.setting.26.48e04f0eaBVGWH


三、 测试用例及资源命名

 

俗话说:“没有规矩,不成方圆。”所以,为了更好地利用JSON序列化技巧,首先对测试用例和资源文件进行规范化命名。

 

1. 测试类命名

 

按照行业惯例,测试类的命名应以被测试类名开头并以Test结尾。比如UserService用户服务类的测试类需要命名为UserServiceTest用户服务测试类

 

单元测试类应该放在被测试类的同一工程的“src/test/java”目录下,并且要放在被测试类的同一包下。注意,单元测试类不允许写在业务代码目录下,否则在编译时没法过滤这些测试用例。

 

2. 测试方法命名

 

按照行业规范,测试方法命名应以test开头并以被测试方法结尾。比如:batchCreate批量创建的测试方法需要命名为testBatchCreate测试:批量创建,queryByCompanyId根据公司标识查询的测试方法需要命名为testQueryByCompanyId测试:根据公司标识查询

 

当一个方法对应多个测试用例时,就需要创建多个测试方法,原有测试方法命名已经不能满足需求了。有人建议在原有的测试方法命名的基础上,添加123等序号表示不同的用例。比如:testBatchCreate1测试:批量创建1、testBatchCreate2测试:批量创建2……但是,这种方法不能明确每个单元测试的用意。

 

这里,作者建议在原有的测试方法命名的基础上,添加“With+条件”来表达不同的测试用例方法。

 

1) 按照结果命名

 

testBatchCreateWithSuccess测试:批量创建-成功

testBatchCreateWithFailure测试:批量创建-失败

testBatchCreateWithException测试:批量创建-异常

 

2) 按照参数命名

 

testBatchCreateWithListNull测试:批量创建-列表为NULL

testBatchCreateWithListEmpty测试:批量创建-列表为空

testBatchCreateWithListNotEmpty测试:批量创建-列表不为空

 

3) 按照意图命名

 

testBatchCreateWithNormal测试:批量创建-正常

testBatchCreateWithGray测试:批量创建-灰度

testBatchCreateWithException测试:批量创建-异常

 

当然,还有形成其它的测试方法命名方式,也可以把不同的测试方法命名方式混用,只要能清楚地表达出这个测试用例的涵义即可。

 

3. 测试类资源目录命名

 

这里,作者建议的资源目录命名方式为——以test开头且以被测试类名结尾。比如:UserService用户服务类的测试资源目录可以命名为testUserService。

 

那么,这个资源目录应该放在哪儿了?作者提供了2个选择:

 

放在“src/test/java”目录下,跟测试类放在同一目录下——这是作者最喜欢的方式;

放在“src/test/resources”目录下,跟测试类放在同一目录下——建议IDEA用户采用这种方式。

 

4. 测试方法资源目录命名

 

在前面的小节中,我们针对测试方法进行了规范命名。这里,我们可以直接拿来使用——即用测试方法名称来命名测试目录。当然,这些测试方法资源目录应该放在测试类资源目录下。比如:测试类UserServiceTest用户服务测试类的测试方法testBatchCreateWithSuccess测试:批量创建-成功的测试资源目录就是testUserService/testBatchCreateWithSuccess。

 

另外,也可以采用“测试方法名称”+“测试条件名称”二级目录的命名方式。比如测试类UserServiceTest用户服务测试类的测试方法testBatchCreateWithSuccess测试:批量创建-成功的测试资源目录就是testUserService/testBatchCreate/success。

 

这里,作者首推的是第一种方式因为测试方法名称和资源目录名称能够保持一致。

 

5. 测试资源文件命名

 

在被测试代码中,所有参数、变量都已经有了命名。所以,建议优先使用这些参数和变量的名称,并加后缀“.json”标识文件格式。如果这些资源文件名称冲突,可以添加前缀以示区分比如userCreateList的资源文件名称为“userCreateList.json”。

 

另外,在测试用例代码中,把这些测试资源文件加载后,反序列化为对应的数据对象,这些数据对象的变量名称也应该跟资源文件名称保持一致。

 

image.png 

 

6. 测试资源文件存储

 

在测试资源目录和名称定义好之后,就需要存入测试资源文件了。存储方式总结如下:

 

如果是测试类下所有测试用例共用的资源文件,建议存储在测试类资源目录下,比如:testUserService;

如果是测试用例独有的资源文件,建议存储在测试方法资源目录下,比如:testUserService/testBatchCreateWithSuccess;

如果是某一被测方法所有的测试用例共用的资源文件,建议存储在不带任何修饰的测试方法资源目录下,比如:testUserService/testBatchCreate;

如果测试类资源目录下只有一个测试方法资源目录,可以去掉这个测试方法资源目录,把所有资源文件存储在测试类资源目录下。

 

注意

这里的资源文件不光是JSON资源文件,但也可以是其它类型的资源文件。

 

7. 文件名称过长

 

由于资源目录名称较长(大概超过50个字符),可能会导致git检出代码时出现以下错误:

 

image.png 

 

或者,在添加文件时出现以下错误:

 

image.png 

 

可以通过以下git设置参数解决:

 

image.png 

 

当然,测试用例名称和资源目录名称没必要太长,可以进行一些精简使其小于等于50个字符。

 

8. JSON资源文件格式

 

关于JSON资源文件是否格式化的建议:不要格式化JSON资源文件内容,否则会占用更多的代码行数,还会导致无法直接进行文本比较。


  接下篇:https://developer.aliyun.com/article/1227488?groupCode=java

相关文章
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
96 2
|
2月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
44 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
29 5
|
2月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
48 1
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
123 0
在Java中处理JSON数据:Jackson与Gson库比较
|
2月前
|
分布式计算 Java 大数据
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
39 0
|
26天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
55 3
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
70 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
255 7
Jmeter实现WebSocket协议的接口测试方法
|
3月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
267 3
快速上手|HTTP 接口功能自动化测试