程序员的测试课
郑晔
开源项目 Moco 作者
18911 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 23 讲
加餐 (1讲)
结束语 (1讲)
程序员的测试课
15
15
1.0x
00:00/00:00
登录|注册

14 | 在 Spring 项目如何进行集成测试?

你好,我是郑晔!
上一讲我们讲了 Spring 对轻量级开发的支持。不同于传统的开发方式,Spring 希望可以做到开发不依赖于应用服务器。为了达成这个目标,Spring 提供了各种支持,能够让你在部署到容器之前完成所有代码的基础验证工作。在核心业务部分,只要我们能够不过分依赖于 Spring 的种种特性,测试就和普通的单元测试差别不大。
不过在真实世界的软件开发中,我们总要与其它的外部组件集成。一旦牵扯到集成,测试的难度就上来了。不过正如前面所说,Spring 要尽可能让你在不依赖于容器的情况下进行测试。Spring 的做法就是提供一套自己的方案,替代掉对于容器的依赖。
这一讲,我们就来看看采用 Spring 的项目如何做集成测试。

数据库的测试

今天数据库几乎成了所有商业项目的标配,所以,Spring 也提供了对于数据库测试很好的支持。我们之前说过,一个好的测试要有可重复性,这句话放到数据库上就是要保证测试之前的数据库和测试之后的数据库是一样的。怎么做到这一点呢?

测试配置

通常有两种做法,一种是采用嵌入式内存数据库,也就是在测试执行之后,内存中的数据一次丢掉。另一种做法就是采用真实的数据库,为了保证测试前后数据库是一致的,我们会采用事务回滚的方式,并不把数据真正地提交进数据库里。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Spring项目集成测试方法包括数据库测试和Web接口测试。数据库测试可采用嵌入式内存数据库或事务回滚,建议使用事务回滚以确保代码一致性。Web接口测试可使用@SpringBootTest进行整体集成测试,或@WebMvcTest对单元进行测试的集成测试。采用模拟Web环境进行测试,不依赖于部署过程,测试速度可大幅提升。总体而言,采用轻量级测试手段,保证代码正确性是关键。Spring的测试支持丰富,读者可通过阅读文档了解更多特性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员的测试课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 大碗
    如果业务逻辑里面有发布消息到MQ的逻辑,在集成测试里面也是要部署一个mq_test来测试吗,有没有什么好方法

    作者回复: 首先,如果有复杂的业务逻辑,最好不要放到集成里面做,可以在单元测试里面解决。如果你用的 MQ 是 Kafka,它本身是包含 Mock Producer 和 Mock Consumer 的,这个道理和 Mock Server 是一样的。其它的实现可以自己看一下是否支持 Mock。

    2021-09-06
    6
  • webmin
    H2本身支持设定为模拟oracle,mysql等数据库(url中加上MODE=Oracle),可以支持特定DB常用的函数和机制,到是准备测试用的初始化数据是比较考验耐心和毅力,后期如果调整schema,需要对测试用到的SQL逐一调整也一项体力活。

    作者回复: 多谢补充

    2021-09-03
    2
    4
  • 邓志国
    引入cucumber后,实际上是启动了web服务,通过http来测试,这样更加真实。不知道mockmvc有没有什么坑,毕竟它稍微假了一点

    作者回复: 这就是你多大程度上相信别人了

    2021-09-04
    3
  • sylan215
    之前没有了解过嵌入式内存数据库,这次学习了,回头也了解下。 我们目前做数据库相关的测试,就用的独立的测试数据库的做法,当然,我们是逻辑验证为主,所以可以保证一致性。 如果不能使用单独测试数据库的话(业务关联逻辑较强的时候),我们会考虑使用测试数据回滚的方式来做,就是会有独立的数据准备的接口,然后有独立的数据清洗的接口,这样做的困难点,就是保证数据一致性的问题,比较测试逻辑本身也可能存在 bug。 最后说的 Web 接口测试,没有特别明白为啥不使用真实的 Web 环境,如果是为了测试分离,倒是可以理解,其他的好像影响不大。
    2021-09-16
    3
  • byemoto
    老师, 对于Go语言来说是否也有类似的测试工具推荐使用呢?
    2021-09-03
    2
  • 砖用冰西瓜
    “不能为了测试的需要而修改代码”说的是不是实现细节?如果遗留系统的一些函数之前写的是不可测的,那我把它改成可测试的,算是“为了测试的需要而修改代码”吗?
    2022-08-15归属地:北京
    1
  • Geek_8206f4
    请问带有security或者oauth授权的接口该如何进行测试呢
    2022-10-19归属地:广东
  • ifelse
    采用轻量级的测试手段,保证代码的正确性--记下来
    2022-06-12
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部