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
《程序员的测试课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- 邓志国构造函数不写autowire也能依赖注入
作者回复: 多谢补充
2021-09-04216 - 蔡奎老师,spring 应用中依赖太多,每次启动都需要几分钟,如何保证测试。为了减少启动时间,步子都会迈大了,导致一些逻辑都不会写测试。最后就放弃测试。
作者回复: 你说得对,从单元测试的角度,不依赖于Spring是最好的测试选择。依赖于Spring属于集成测试,是下一讲的内容。
2021-09-016 - aoe一直错误使用字段注入,所以感觉单元测试非常难
作者回复: 其实就差一点点
2021-11-1255 - 我的康康老师,那平常开发过程中,也是不推荐用基于字段注入 而是推荐用基于构造方法注入吗?
作者回复: 是的
2021-09-015 - null一些场景不适合使用构造器注入的呢?比如循环依赖。
作者回复: 循环依赖其实是一种设计的失败,应该先改善设计,再来设计。
2021-12-2422 - Geek_3b1096ApplicationContext用起来简单,之后会避免
作者回复: 就是用起来容易,才容易犯错误
2021-09-091 - sylan215有幸在 Java1.5 的时代就接触了 Java,那时候 Java 的三个方向是 J2EE、J2SE、J2ME,后面 Spring 横空出世时,我就没有了解了,不过挺老师这么一说,真的是个转折点了。 至于框架对测试的支持,我也有过体会,比如 Python 里面的 Django 框架对测试的支持就是特别好,我当时学习的一个教程,就是一边讲代码,一边写测试,毫无违和感。 当然,老师也说了,不要过度依赖某些特性,所以怎么把框架特性,适度合理的进行利用,也是一个技术活。2021-09-162
- 花花大脸猫因为字段注入的问题,导致mock对象很难,后续全部调整成了构造器注入,另外我的观念是尽量单元测试不需要springboot的运行时环境依赖,这样会使得单元测试不纯粹,还需要依赖外部组件启动玩成才能运行2022-04-1311
- 一打七推荐用基于构造方法注入,老师能举个mock参数的例子吗?2023-02-11归属地:北京
- 努力努力再努力老师,像是有一些 handler 类,只是单纯处理下数据就可以销毁实例了,这种并不打算交给容器管理,但是方法内可能又会使用到 spring 容器管理的 bean,例如某个 service,这种如果不使用 context 获取的话,可以怎么处理呢?2022-11-11归属地:广东
收起评论