单元测试之 - Review一个微服务的单元测试

这里以github上一个microservice的demo代码为例,来看看如何为一个完整的服务编写单元测试。具体代码如下所示,我们重点查看一下catalog和customer,order中的单元测试有哪些。

首先来看catalog服务的单元测试,这个服务下面主要编写了CatalogWebIntegrationTest.java和RepositoryTest.java。下图是CatlogWebIntegrationTest的代码,左边是@RunWith,@SpringBootTest等注解,@ActiveProfile的作用时指定使用application-test.properties配置文件中的值。setup()中初始化了RestTemplate,查询了一个iPodNano。

右边是具体的两个集成测试,集成测试本质是通过restTemplate调用应用接口,验证接口返回的内容。默认情况下,Spring Boot 使用 H2 数据库配置 DataSource bean,具体配置可以在 application.properties 或 application.yml 文件中设置。通常,集成测试的配置文件会使用 H2 数据库配置来进行测试,以确保测试是快速且独立的。理论上来说,如果使用H2数据库,因为是内存数据库,每次运行测试前都需要自动准备测试数据,以下面的的代码为例,在@Before中应该先往H2数据库中插入数据,这样才能保证@Test中调用Get请求的时候,能获取到期望的数据。所以,下面的自动化测试理论上还需要优化,不能直接在setup()部分通过查询获取测试数据,因为可能数据库中并没有name=iPod nano的数据。

接着再看看RepositoryTest.java.这也是个集成测试,调用实例化的itemRepository对象获取数据,并校验结果,这个测试的问题也是没有在@Before阶段准备测试数据,即提前往数据库中插入数据进行测试。

Customer服务中包含集成测试和契约测试,集成测试和上面Catalog服务基本相似,不再重复说明,对于契约测试,现在spring框架提供了专门生成契约测试的包,所以,老的编写契约测试的方式也不再review,忽略掉。接下来看看Eureka-server服务的测试。如下所示:

可以看到,也是一个集成测试,@LocalServerPort注解是用于获取应用启动时生成的随机端口,如果port设置了值,则用自定义port值。测试中,用restTemplate调用了服务的两个接口,查看返回的response是否是200.201等。这里因为测试的是eureka server,集成测试保证服务能正常启动即可。

order服务中的集成测试和catalog服务中集成测试基本一致,所以,也不用再次review。可以看到,对于一个完整的应用,编写单元或者集成测试基本就是常用的几个注解。运用前面介绍的知识,完成可以为真实项目服务编写完成的单元测试或者集成测试。

单元测试、集成测试、契约测试传送门:

单元测试之- mock工具mockito_taoli-qiao的博客-CSDN博客单元测试之 - Spring框架提供的单元/集成测试注解_taoli-qiao的博客-CSDN博客

契约测试之 - 使用Pact-JS编写契约测试_taoli-qiao的博客-CSDN博客

相关推荐
无忧.芙桃1 小时前
vibe coding之opencode的使用
ai·单元测试·opencode
lpd_lt1 天前
如何让AI生成项目的单元测试,propmt技巧详解
java·人工智能·单元测试·ai编程
ai_coder_ai2 天前
论单元测试方法及应用
单元测试
川石课堂软件测试2 天前
性能测试|JMeter常用线程组设置策略
大数据·数据库·功能测试·测试工具·jmeter·mysql·单元测试
川石课堂软件测试2 天前
什么是埋点测试,app埋点测试怎么做?
功能测试·测试工具·华为·小程序·单元测试·appium·harmonyos
不会就选b3 天前
数据结构之如何让opencode帮我们完成单元测试
单元测试
FFZero13 天前
[mpv脚本系统] (二) Lua三层闭包实现自动资源管理
junit·单元测试·lua
汽车仪器仪表相关领域6 天前
Kvaser Hybrid CAN/LIN 单通道三合一总线分析仪:高性价比CAN FD/LIN集成测试利器
运维·服务器·网络·数据挖掘·数据分析·单元测试·集成测试
一路往蓝-Anbo6 天前
第十章:TDD部署 —— Ceedling 环境的深度集成
stm32·单片机·嵌入式硬件·单元测试·测试驱动开发·tdd
川石课堂软件测试7 天前
使用mock进行接口测试教程
数据库·python·功能测试·测试工具·华为·单元测试·appium