单元测试之 - 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 天前
《javaweb基础》后端篇————maven补充(用maven单元测试,maven常见问题)
单元测试·maven
AmyLin_20015 天前
AI 如何做出数学发现【5】- AI 数学证明怎样做单元测试:从“看起来顺”到可否证工作流
人工智能·单元测试·openai·数学推理·符号计算·ai推理·反例生成
是小艺吗。6 天前
第三方机构出具的软件功能测试报告的作用与流程说明,中承信安专业讲解
功能测试·单元测试·软件测试报告·软件功能测试·软件测评
测试老哥6 天前
软件测试:单元测试详解
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
回眸&啤酒鸭7 天前
【回眸】搞钱灵感——智能体 汽车软件单元测试与集成测试
单元测试·汽车·集成测试
小龙飞刀9 天前
Chrome插件自动化测试:单元测试、集成测试
chrome·单元测试·集成测试
LayZhangStrive10 天前
claude code使用命令技巧(四)(开发沉淀的提示词模板)
ai·单元测试·prompt·ai编程·提示词·claude code
栈溢出的浪漫12 天前
Python单元测试框架覆盖率-Coverage
python·单元测试·工具·覆盖率·coverage
名字还没想好☜13 天前
Go 表驱动测试实战:用 t.Run 子测试组织可维护的单元测试
golang·单元测试·log4j·go·testing