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

13 | 在 Spring 项目中如何进行单元测试?

你好,我是郑晔!
上一讲,我们将 ToDo 应用从命令行扩展为了 REST 服务。在这个应用里,我们用到了 Spring 这个在 Java 世界中广泛使用的框架。大多数人对于 Spring 这个框架的认知都停留在如何使用它完成各种功能特性上,而 Spring 更大的价值其实在对于开发效率的巨大提升上,其中就包含了对测试的支持。
在接下来的两讲,我们就把注意力从一个具体的项目上挪开,放到 Spring 框架本身,看看它对开发效率提升的支持。

轻量级开发的 Spring

很多人对于 Spring 的理解是从依赖注入容器开始的,但是,Spring 真正对行业的影响却是从它对原有开发模式的颠覆开始。
在 21 世纪初的时候,Java 世界的主流开发方式是 J2EE,也就是 Java 的企业版。在那个时候,企业版代表软件开发的最高水准。在这个企业版的构想中,所有的复杂都应该隐藏起来,写代码的程序员不需要知道各种细节,需要的东西拿过来用就好了。
这种想法本身是没有问题的,时至今日,很多平台和框架也是这么想的。到了具体的做法上,J2EE 提供了一个应用服务器,我把这些复杂性都放在这个应用服务器里实现,你写好的程序部署到这个应用服务器上就万事大吉了。但正是因为应用服务器的存在,使用 J2EE 进行开发变成了一件无比复杂的事情。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Spring框架的单元测试支持是提高开发效率的重要工具。它通过轻量级开发理念和测试支持,改变了传统J2EE开发模式,提供了更简单、高效的开发方式。在Spring中,依赖注入容器构建稳定的业务核心,并利用Spring提供的基础设施进行集成测试。关键在于避免错误的依赖注入方式,如基于字段的注入,而应该使用构造函数注入或利用Lombok的Annotation来简化代码。Spring的测试支持为开发者提供了在本地验证代码的机会,极大地提升了开发效率。文章还强调了业务代码不应过度依赖框架,避免让代码陷入难以调整的困境。总的来说,Spring框架的轻量级开发理念和对测试的支持,使其成为Java社区的主流框架,也为Spring Boot的诞生奠定了基础。

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

全部留言(13)

  • 最新
  • 精选
  • 邓志国
    构造函数不写autowire也能依赖注入

    作者回复: 多谢补充

    2021-09-04
    2
    16
  • 蔡奎
    老师,spring 应用中依赖太多,每次启动都需要几分钟,如何保证测试。为了减少启动时间,步子都会迈大了,导致一些逻辑都不会写测试。最后就放弃测试。

    作者回复: 你说得对,从单元测试的角度,不依赖于Spring是最好的测试选择。依赖于Spring属于集成测试,是下一讲的内容。

    2021-09-01
    6
  • aoe
    一直错误使用字段注入,所以感觉单元测试非常难

    作者回复: 其实就差一点点

    2021-11-12
    5
    5
  • 我的康康
    老师,那平常开发过程中,也是不推荐用基于字段注入 而是推荐用基于构造方法注入吗?

    作者回复: 是的

    2021-09-01
    5
  • null
    一些场景不适合使用构造器注入的呢?比如循环依赖。

    作者回复: 循环依赖其实是一种设计的失败,应该先改善设计,再来设计。

    2021-12-24
    2
    2
  • Geek_3b1096
    ApplicationContext用起来简单,之后会避免

    作者回复: 就是用起来容易,才容易犯错误

    2021-09-09
    1
  • sylan215
    有幸在 Java1.5 的时代就接触了 Java,那时候 Java 的三个方向是 J2EE、J2SE、J2ME,后面 Spring 横空出世时,我就没有了解了,不过挺老师这么一说,真的是个转折点了。 至于框架对测试的支持,我也有过体会,比如 Python 里面的 Django 框架对测试的支持就是特别好,我当时学习的一个教程,就是一边讲代码,一边写测试,毫无违和感。 当然,老师也说了,不要过度依赖某些特性,所以怎么把框架特性,适度合理的进行利用,也是一个技术活。
    2021-09-16
    2
  • 花花大脸猫
    因为字段注入的问题,导致mock对象很难,后续全部调整成了构造器注入,另外我的观念是尽量单元测试不需要springboot的运行时环境依赖,这样会使得单元测试不纯粹,还需要依赖外部组件启动玩成才能运行
    2022-04-13
    1
    1
  • 一打七
    推荐用基于构造方法注入,老师能举个mock参数的例子吗?
    2023-02-11归属地:北京
  • 努力努力再努力
    老师,像是有一些 handler 类,只是单纯处理下数据就可以销毁实例了,这种并不打算交给容器管理,但是方法内可能又会使用到 spring 容器管理的 bean,例如某个 service,这种如果不使用 context 获取的话,可以怎么处理呢?
    2022-11-11归属地:广东
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部