关于单元测试问题

2019-11-06 08:38:34 +08:00
 wlkq
首先是后端的接口做单元测试

大家公司的单元测试是怎么做的,有几个问题比较疑惑。

1、单元测试是否需要连接数据库
如果连接数据库的话,是使用新的数据库吗?
真实的数据库的基境(就是单元测试需要的真实的数据库数据)是怎么建立的

2、什么情况下使用 mock 写单元测试

3、大家的单元测试集成了吗?
比如:上线之前的检测,代码提交的检测,回归测试等

4、大家如果有用 rpc 的话,是怎么做单元测试的?

现在我的想法:
1、把单元测试分为整体性测试和分支覆盖型测试(名字是我随便起的啊)

整体性测试:就是和黑盒测试差不多,测一次正确的接口返回数据,最多再加一次错误的验证,真实的连接数据库操作

分支覆盖型测试:使用 Mock,相当于白盒测试,做代码里面的分支判断的覆盖
2146 次点击
所在节点    问与答
14 条回复
xw900812
2019-11-06 09:35:19 +08:00
从你的问题中,我觉得你还懂什么叫单元测试。
mikulch
2019-11-06 09:41:04 +08:00
先整体了解一下有效的单元测试吧。单元测试的核心不在于测试,而在于设计。TDD 本质上来说是一种设计思想。
你明白了这个的话,上面的问题也就不是问题了。
blanu
2019-11-06 09:41:26 +08:00
看一下测试金字塔。现在的风尚是减少单元测试,多用集成测试覆盖
mikulch
2019-11-06 09:42:31 +08:00
https://github.com/mikumikulch/myblog/blob/master/测试 /you-xiao-de-dan-yuan-ce-shi-shi-yao-shi-you-xiu-de-ce-shi-ff1f.md

https://github.com/mikumikulch/myblog/blob/master/测试 /you-xiao-de-dan-yuan-ce-shi-dan-yuan-ce-shi-de-she-ji-xin-li-xue.md

我很久以前写过一些单元测试的博客,时间久远,现在格式出了点问题,不过内容还是可以读的,你可以尝试看一看。。
maichael
2019-11-06 09:43:00 +08:00
@blanu #3 测试金子塔最底层最大的不就是单元测试么。
maichael
2019-11-06 09:45:30 +08:00
1. 不需要也不应该链接数据库
2. 跟你这一单元无关的都应该用 Mock 代替
Orenoid
2019-11-06 10:02:22 +08:00
@maichael #6
一个疑问,不连数据库,涉及数据库的单元你怎么测?
另外且不说能不能做到“不需要”,“不应该”这一点我是不太信服的
比如 flask 官方的 tutorial 里,人家就直接建了一个临时数据库来用于测试,而且还往里头放了假数据
otakustay
2019-11-06 10:25:19 +08:00
@Orenoid 涉及到数据库的就不是单元测试的责任了,后面还有集成测试,端到端测试等等
assad
2019-11-06 10:29:53 +08:00
要是小厂或者创业,还写什么单元测试。
业务都写不完,还写单元测试。
搞得我一个工作 10 年的人,不知道单元测试从何写起。

看了一大堆写单元测试的例子,哎,准备些几行,一想,有个毛用,写这玩意。后端就自己一个人,还写个蛋蛋单元测试啊
Orenoid
2019-11-06 10:34:57 +08:00
@otakustay #8
是不是可以理解为涉及数据库操作的地方不应该由单元测试来管?
但我感觉 CRUD 项目不少函数 /方法都要连接数据库,写单元测试的时候这些都直接不管?
没什么测试经验,见谅。。
wlkq
2019-11-06 10:38:08 +08:00
@assad 没办法啊,公司现在要求写,后面还要求集成
wlkq
2019-11-06 10:43:28 +08:00
@Orenoid #10 其实他的意思是:
单元测试:测试的是程序员写的代码逻辑,代码对于程序员来说是透明的,可以做代码逻辑的覆盖性测试,做逻辑覆盖,使用 mock 就可以了,连接数据库的不太必要

集成测试、端到端的测试:属于黑盒、灰盒测试的范畴,不属于单元测试了,因此连接数据库也没问题

因此这两者结合就很好的弥补了对方的短板,所以两者都需要
Orenoid
2019-11-06 10:46:47 +08:00
@wlkq #12 虽然我还是觉得单元测试这里说不太通,不过先不讨论了,我对测试体系确实不怎么了解。。
otakustay
2019-11-06 15:14:20 +08:00
@otakustay 单元测试不连数据库&要尽可能多的代码能做单元测试,往这个方向去看看自己代码应该怎么写,函数要怎么拆,架构要怎么设计,会很有益

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/616706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX