单元测试解耦数据库 - 依赖注入和 Mockito

本文探讨了在Java后端开发中,如何通过依赖注入和Mockito库实现单元测试与数据库的解耦,以确保代码在无需实际数据库的情况下运行单元测试,从而避免对生产数据的污染。通过将DAO类的数据库连接作为构造函数参数,并使用Mockito模拟数据库行为,实现了在测试环境中控制数据库交互的效果。
摘要由CSDN通过智能技术生成

基本背景

团队开发任务中涉及一个移动应用的 Java 后端,以增删查改 (CRUD) 为主,附加一些其他的服务逻辑。系统的持久层是用一些以 DAO 做名字结尾的类构成的。每一个 DAO 里面实现了增删查改的具体实现,一般模式是获得一个 Hibernate Session,运行 SQL Query,再把结果组织一下返回给客户端。

由于 DAO 类的这种开发模式,运行 JUnit 单元测试的时候需要环境中有一个配置好的 MySQL 实例,这极大限制了代码包持续构建的能力。

代码的持续构建对于开发效率来说是非常重要的。比较理想的情况是开发者每提交一次 commit, 代码托管平台上能够自动构建一下,并运行单元测试来保证基本逻辑不出问题。这样代码审阅者可以在知道测试通过的前提下来阅读代码,可以节省自己下载代码、测试的手工步骤。

还有是部署前的构建也希望能有一些测试来验证。为了节约网络传输成本,我们在生产环境构建新版本的代码包,而由于这些测试对数据库的依赖,构建的时候如果运行单元测试,有可能对生产服务器上的数据造成污染,所以我们选择了不进行部署前的单元测试。

问题描述

我们希望做到

  1. 代码托管平台可以自动构建每一个上传的 commit
  2. 部署之前能够稳定、安全地运行一些测试

第一个目标有赖于具体托管平台的工具,这篇博文不具体讨论这些工具的使用情况。更容易解决的是第二个问题,如果保证了运行单元测试的时候和数据库实例解耦,就不用担心污染生产数据的问题了。当然还有一个解决方法是在其他环境构建好代码包,然后通过网络传输到生产服务器,但由于网络带宽有限,从开发机上传代码包需要几十分钟,所以在生产服务器上构建是尝试过的效率比较高的方法了。

于是为了实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值