当前位置: 首页 > news >正文

单元测试之 - 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博客

http://www.lryc.cn/news/111830.html

相关文章:

  • NetSuite 2023.2 Cash 360 功能更新
  • vue2-组件和插件的区别
  • neo4j查询语言Cypher详解(一)--语法和子句
  • PCIe总线详解
  • 【vim 学习系列文章 4 - vim与系统剪切板之间的交互】
  • 代码随想录算法训练营第五十六天| 583. 两个字符串的删除操作 72. 编辑距离
  • Mac强制停止应用
  • Linux系统Redis的哨兵架构配置
  • HarmonyOS/OpenHarmony-ArkTS基于API9元服务开发快速入门
  • macbook怎么卸载软件?2023年最新全新解析macbook电脑怎样删除软件
  • c51单片机16个按键密码锁源代码(富proteus电路图)
  • GraalVM
  • File 类和 InputStream, OutputStream 的用法总结
  • 开源进展 | WeBASE v3.1.0发布,新增多个实用特性
  • C++动态加载 插件
  • redis的缓存更新策略
  • Android应用开发(6)TextView进阶用法
  • Matlab滤波、频谱分析
  • 车载软件架构 —— 车载软件入侵检测系统
  • “深入解析JVM内部机制:理解Java虚拟机的工作原理“
  • FPGA初步学习之串口发送模块【单字节和字符串的发送】
  • Kotlin重点理解安全性
  • 基于Java+SpringBoot+SpringCloud+Vue的智慧养老平台设计与实现(源码+LW+部署文档等)
  • Spring中的全局异常处理
  • 【安全测试】Web应用安全之XSS跨站脚本攻击漏洞
  • LeNet卷积神经网络-笔记
  • 使用XMLHttpRequest实现文件异步下载
  • Lombok 的安装与使用
  • springBean生命周期解析
  • 人工智能轨道交通行业周刊-第54期(2023.7.31-8.6)