V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wlkq
V2EX  ›  问与答

关于单元测试问题

  •  
  •   wlkq · 2019-11-06 08:38:34 +08:00 · 2149 次点击
    这是一个创建于 1848 天前的主题,其中的信息可能已经有所发展或是发生改变。
    首先是后端的接口做单元测试

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

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

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

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

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

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

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

    分支覆盖型测试:使用 Mock,相当于白盒测试,做代码里面的分支判断的覆盖
    14 条回复    2019-11-06 15:14:20 +08:00
    xw900812
        1
    xw900812  
       2019-11-06 09:35:19 +08:00   ❤️ 1
    从你的问题中,我觉得你还懂什么叫单元测试。
    mikulch
        2
    mikulch  
       2019-11-06 09:41:04 +08:00   ❤️ 1
    先整体了解一下有效的单元测试吧。单元测试的核心不在于测试,而在于设计。TDD 本质上来说是一种设计思想。
    你明白了这个的话,上面的问题也就不是问题了。
    blanu
        3
    blanu  
       2019-11-06 09:41:26 +08:00 via iPhone
    看一下测试金字塔。现在的风尚是减少单元测试,多用集成测试覆盖
    mikulch
        4
    mikulch  
       2019-11-06 09:42:31 +08:00   ❤️ 1
    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
        5
    maichael  
       2019-11-06 09:43:00 +08:00
    @blanu #3 测试金子塔最底层最大的不就是单元测试么。
    maichael
        6
    maichael  
       2019-11-06 09:45:30 +08:00
    1. 不需要也不应该链接数据库
    2. 跟你这一单元无关的都应该用 Mock 代替
    Orenoid
        7
    Orenoid  
       2019-11-06 10:02:22 +08:00
    @maichael #6
    一个疑问,不连数据库,涉及数据库的单元你怎么测?
    另外且不说能不能做到“不需要”,“不应该”这一点我是不太信服的
    比如 flask 官方的 tutorial 里,人家就直接建了一个临时数据库来用于测试,而且还往里头放了假数据
    otakustay
        8
    otakustay  
       2019-11-06 10:25:19 +08:00
    @Orenoid 涉及到数据库的就不是单元测试的责任了,后面还有集成测试,端到端测试等等
    assad
        9
    assad  
       2019-11-06 10:29:53 +08:00
    要是小厂或者创业,还写什么单元测试。
    业务都写不完,还写单元测试。
    搞得我一个工作 10 年的人,不知道单元测试从何写起。

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

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

    因此这两者结合就很好的弥补了对方的短板,所以两者都需要
    Orenoid
        13
    Orenoid  
       2019-11-06 10:46:47 +08:00
    @wlkq #12 虽然我还是觉得单元测试这里说不太通,不过先不讨论了,我对测试体系确实不怎么了解。。
    otakustay
        14
    otakustay  
       2019-11-06 15:14:20 +08:00
    @otakustay 单元测试不连数据库&要尽可能多的代码能做单元测试,往这个方向去看看自己代码应该怎么写,函数要怎么拆,架构要怎么设计,会很有益
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1206 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:19 · PVG 02:19 · LAX 10:19 · JFK 13:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.