最近我们讨论了一个问题,要不要 mock 数据库? 本文是我的一些个人观点。
首先,对于第三方调用进行 mock ,这是基本都能获得一致意见的,但是是否需要 mock 数据库,则各有分歧。我是赞成不 mock 数据库 的,原因如下:
那么应该如何测试呢?我一般都是在跑CI的时候,起一个全新的数据库,然后跑数据库 migration,在每一个单元测试 setUp
时
组装数据,在 tearDown
时删除数据。如果是 Go 的单元测试,那么也是类似的,在 Test
函数开始组装数据,defer
删除数据。基本的流程是:
当然,这种模式也有它的弊端:
对于第一点,我是真实经历过的,这一点只能靠好好的写测试,清理该清理的数据来做到;第二点,我认为问题不大,也没有那么多 测试代码来跑,数据库能扛住线上的请求,却扛不住单元测试(我知道我知道,配置虽然不太一样)?
而对于 mock 数据库连接这种方式,需要付出很大代价,却无法获得超额的收益,即收益抵不过付出。
这就是我的看法了,你呢?