V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
weo0
V2EX  ›  程序员

业务代码每行都需要单元测试覆盖吗?

  •  
  •   weo0 · 2020-07-31 09:46:46 +08:00 · 5306 次点击
    这是一个创建于 1608 天前的主题,其中的信息可能已经有所发展或是发生改变。
    34 条回复    2020-08-02 01:11:36 +08:00
    zsc8917zsc
        1
    zsc8917zsc  
       2020-07-31 10:02:26 +08:00
    这么有时间,是家里有矿嘛
    whitehack
        2
    whitehack  
       2020-07-31 10:13:34 +08:00
    一般就对大的逻辑做几个整体测试..结束..没那时间一个一个小功能的抠
    preyta
        3
    preyta  
       2020-07-31 10:14:06 +08:00
    根据项目的规模和要求确定吧
    maichael
        4
    maichael  
       2020-07-31 10:17:05 +08:00
    做取舍呗,根据该功能的重要性来决定覆盖率的要求。
    mmrx
        5
    mmrx  
       2020-07-31 10:22:16 +08:00
    只能说理论说理论,实际论实际
    wenjy
        6
    wenjy  
       2020-07-31 10:29:04 +08:00
    公司的项目,时间充裕的话尽量覆盖(因为维护的人是你自己,不想改代码瑟瑟发抖),外包的话,有单元测试吗??
    janxin
        7
    janxin  
       2020-07-31 10:30:49 +08:00
    不一定,但是要有最低标准
    heguangyu5
        8
    heguangyu5  
       2020-07-31 11:52:19 +08:00
    如果你把测试覆盖率当作开发者的辅助工具,而不是考核指标的话,这事就好办了。
    dilu
        9
    dilu  
       2020-07-31 14:01:34 +08:00 via Android
    顺便说一句,行覆盖率≠开发质量
    jaylee4869
        10
    jaylee4869  
       2020-07-31 15:31:23 +08:00
    不需要。核心关注一下 if else 、switch 。
    ShutTheFu2kUP
        11
    ShutTheFu2kUP  
       2020-07-31 15:54:46 +08:00
    我反正之后都要做到了,昨天写了个憨逼循环,往公司生产库插入了几亿条数据...
    TtTtTtT
        12
    TtTtTtT  
       2020-07-31 16:07:18 +08:00
    有必要性。
    但是看你们团队的取舍。
    单元测试用于确认你的代码符合你的 design,所以是一份非常有价值的文档和设计。
    一旦出现变更,单元测试和书面文档比,性价比非常高。
    尽管如此,如果测试资源便宜的话,或者变更时效性要求非常高的场合,都可以被省略的。
    FlushHip
        13
    FlushHip  
       2020-07-31 16:10:02 +08:00
    行覆盖太扯了,业务代码多打点日志不香吗,对核心的底层模块也不用行覆盖,函数覆盖就够了。
    dinjufen
        14
    dinjufen  
       2020-07-31 16:20:30 +08:00
    @ShutTheFu2kUP 结果怎样?
    Leigg
        15
    Leigg  
       2020-07-31 16:23:10 +08:00 via Android
    @ShutTheFu2kUP 我笑了,有后续吗
    ZehaiZhang
        16
    ZehaiZhang  
       2020-07-31 16:24:46 +08:00
    @ShutTheFu2kUP 问题不大,不用走人
    azcvcza
        17
    azcvcza  
       2020-07-31 16:27:26 +08:00
    如果尊重开发规律的话,每个函数都加,每个流程都加,每个业务都加那肯定好,但是这样国内又不会算你的 KPI 。国内一般只注重 0->60 ; 60->100 没谁会记功
    nutting
        18
    nutting  
       2020-07-31 16:30:40 +08:00
    怎么可能,测试的逻辑还能通吗。按方法吧
    ShutTheFu2kUP
        19
    ShutTheFu2kUP  
       2020-07-31 16:49:57 +08:00
    @dinjufen 没咋样,昨天删了一天,今天再删一天应该就正常了。
    @Leigg 后续就是疯狂删数据
    @ZehaiZhang 确实,还不至于到要走人的地步...

    主要是 MySql 超过亿级以后查询太慢了,处理一个要等好久,庆幸的是这张表的数据占用字节都比较少..
    Umenezumi
        20
    Umenezumi  
       2020-07-31 17:29:55 +08:00
    @ShutTheFu2kUP 要是进 hive 和正式数据耦合了 你就等死吧 哈哈
    msg7086
        21
    msg7086  
       2020-07-31 18:29:02 +08:00
    最重要的是行为测试。单元测试看情况,本身分得太细的函数我觉得没必要精准覆盖。上层业务逻辑带到就行了。
    PainAndLove
        22
    PainAndLove  
       2020-07-31 21:56:57 +08:00
    CY
    huluhulu
        23
    huluhulu  
       2020-07-31 22:14:36 +08:00 via iPhone
    我司要求
    line coverage > 80%
    branch coverage> 60%
    kaneg
        24
    kaneg  
       2020-07-31 22:25:40 +08:00 via iPhone   ❤️ 1
    单元测试是开发人员在自己可控范围对自己的一种保护。除了一些极端的边界情况只有在生产环境才会出现,其他大多数情况都是可以通过单元测试来确保其行为是符合预期的。
    你想,自己提交的代码上线后睡个安稳觉它不香吗?
    nianyu
        25
    nianyu  
       2020-07-31 22:55:37 +08:00
    不需要
    nznd
        26
    nznd  
       2020-07-31 23:01:48 +08:00
    我司 想进测试系统需要 UT>40% 分支
    想出测试系统,做 release 需要 UT>90% 分支 (好像不大于也没事 就是部门 boss 会被批 但是没人试过(
    不过周期一般比较长 一个季度 release 一次 最长的两年多
    lizytalk
        27
    lizytalk  
       2020-07-31 23:06:53 +08:00 via iPhone
    @dilu 但是连行覆盖都保证不了不就是完全没有测试么...
    Perry
        28
    Perry  
       2020-07-31 23:19:50 +08:00 via iPhone
    工具齐全的话,100% 不难
    dilu
        29
    dilu  
       2020-08-01 05:34:47 +08:00 via Android
    @lizytalk 你覆盖了也不保证没有问题啊 覆盖率并不代表开发质量
    scnace
        30
    scnace  
       2020-08-01 11:53:21 +08:00 via Android
    写单测其实可以从侧面帮开发者更好地抽象代码模块
    sariya
        31
    sariya  
       2020-08-01 11:56:44 +08:00 via Android
    不存在的…比较独立的模块可以单测,大部分还是要集成测试,不然鸭子类要写到吐
    mreasonyang
        32
    mreasonyang  
       2020-08-01 15:23:13 +08:00 via Android
    这要看你们有没有 QA 团队
    changwei
        33
    changwei  
       2020-08-01 18:58:10 +08:00 via Android
    看你的用户群体,如果是对内部做的系统,用户通常不会提交太奇怪的数据,那就没必要做,如果是对外做的系统,什么人都用,甚至可能会有黑客来攻击,那肯定得覆盖各种异常输入的逻辑。另外,通常做开发都是防御式编程吧,得假设用户提交数据都有可能是错误或者超范围超值域的情况。
    fishCatcher
        34
    fishCatcher  
       2020-08-02 01:11:36 +08:00 via iPhone
    有些错误场景非常刁钻根本没法定义,或者说测试的时候根本想不到那里会出错,100%覆盖是不可能的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5310 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:37 · PVG 15:37 · LAX 23:37 · JFK 02:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.