V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
t4we
V2EX  ›  程序员

大家平时工作,会主动写单测吗?

  •  1
     
  •   t4we · 65 天前 · 6969 次点击
    这是一个创建于 65 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司强制要求新代码 80%单测覆盖率了,大家平时工作代码会写单测吗,是主动还是强制要求?如果强制要求的话,大概是个什么标准?

    67 条回复    2024-09-12 21:41:51 +08:00
    shizhibuyu2023
        1
    shizhibuyu2023  
       65 天前
    不写,要些也用 ai 写
    povsister
        2
    povsister  
       65 天前 via iPhone
    业务不写,infra 写
    maninfog
        3
    maninfog  
       65 天前 via iPhone
    都是 TDD ,测试和代码同步完成。没测试我对自己代码是没自信的
    draymonder
        4
    draymonder  
       65 天前
    工期不赶的情况下,会把核心功能做好单测,变更多的时候,跑一下单测,避免重复测试。
    奈何最近一年的需求基本都是倒排的,就没写单测了... 全靠手工测试+肉眼 review 代码
    yjxjn
        5
    yjxjn  
       65 天前
    要求 C1 覆盖,估算工时时,UT 这部分会专门拿出来算时间的。
    意思也就是说:即使 C1 写一遍,没有任何问题,但是 UT 必须要有。
    ochatokori
        6
    ochatokori  
       65 天前 via Android
    不写,有什么问题给客户测
    liyafe1997
        7
    liyafe1997  
       65 天前
    公司流程要求写,单元测试是其中一项,没办法。还是看要求吧。
    俗话说有几个程度猿愿意写测试的
    page470075640
        8
    page470075640  
       65 天前 via iPhone
    测试好啊 写完可维护大大滴 后续修改跑测试很方便
    raycool
        9
    raycool  
       65 天前
    用 AI 写
    jsonparse
        10
    jsonparse  
       65 天前
    自己只测功能,不写单测( golang/web )
    CaptainD
        11
    CaptainD  
       65 天前
    咋俩不会一个公司吧
    SuperManNoPain
        12
    SuperManNoPain  
       65 天前
    自己负责的业务,使用量比较大的时候,会写完整的流程测试,不敢指望测试妹妹点点点了😅
    Reficul
        13
    Reficul  
       65 天前
    UT FT 总得覆盖一个吧
    kenilalexandra
        14
    kenilalexandra  
       65 天前
    一般复杂的我都是先写单元测试,然后贴到业务代码中两边同时测,比较快排查问题
    Qbertolt
        15
    Qbertolt  
       65 天前
    我们要写 95%以上的测试覆盖率
    guanzhangzhang
        16
    guanzhangzhang  
       65 天前
    核心的都写,不核心的不写
    NX2023
        17
    NX2023  
       65 天前
    组里规范的氛围很好,我现在必写单测了
    dayeye2006199
        18
    dayeye2006199  
       65 天前 via Android
    没法不写,做 infra 的
    qviqvi
        19
    qviqvi  
       65 天前
    想写,有高质量单测教程推荐吗?
    cheese
        20
    cheese  
       65 天前
    野路子开发,从来没写过测试,都是人肉测,有什么测试教程或者规范吗?像我做 web 端 3d 开发的,操作逻辑都是前端手动操作的,这种测试怎么模拟呢?
    jsq2627
        21
    jsq2627  
       64 天前
    流程要求写就写,流程不要求就不写

    如果我是定流程的那会要求写
    DollarKiller
        22
    DollarKiller  
       64 天前
    不写测试 review 要被骂,不按规范来 /(ㄒoㄒ)/~~
    crackidz
        23
    crackidz  
       64 天前
    AI 写的也算自己写的(狗头

    当然是强制要求单测覆盖率
    fredweili
        24
    fredweili  
       64 天前
    也是 80%,现在有 copilot 了
    layxy
        25
    layxy  
       64 天前   ❤️ 1
    单测要写,但是有时候单测比较麻烦,比如依赖的微服务需要 mock 等,工作量很大
    Chad0000
        26
    Chad0000  
       64 天前 via iPhone
    作为一个二道贩子,核心业务也是对接来的。没办法测。
    trzzzz
        27
    trzzzz  
       64 天前
    强制新增 90%覆盖
    OBJECTION
        28
    OBJECTION  
       64 天前
    不写代码都上不去。。。80%
    zijie0
        29
    zijie0  
       64 天前
    单元测试还是相当重要的,推荐几本好书: https://zhuanlan.zhihu.com/p/591751476
    NoDataNoBB
        30
    NoDataNoBB  
       64 天前
    写。
    jackmod
        31
    jackmod  
       64 天前
    有现成的例子才写。自己不会去新搭架子。
    stonesirsir
        32
    stonesirsir  
       64 天前 via Android
    怎么说呢,没要求就不写
    aw2350
        33
    aw2350  
       64 天前
    涉及数据库的怎么写?
    rlds
        34
    rlds  
       64 天前
    不写,能来得及写业务代码就不错了
    KingHL
        35
    KingHL  
       64 天前
    写,强制要求增量代码覆盖率 70%
    smark
        36
    smark  
       64 天前
    @rlds 确实,写不写单测要看给不给写单测的机会
    suotm
        37
    suotm  
       64 天前
    写,最近让 AI 写,挺快的
    2bad4u
        38
    2bad4u  
       64 天前
    我都是先写测试,然后把测试的一部分代码复制写到一个方法,然后再写个测试验证一下。
    galphaxie
        39
    galphaxie  
       64 天前
    写;存量, 增量都要>=90%
    fffq
        40
    fffq  
       64 天前
    不写,有问题用户会反馈的[= =]
    seth19960929
        41
    seth19960929  
       64 天前
    @aw2350 很多种方法
    1. stub 用自己的类代替
    2. 如果写了 dao 层, 自己另外实现一个 dao 去返回
    3. 没有 dao 层, 直接连接数据库操作对象, 可以 mock 数据库操作对象
    4. 最后的办法可以启动一个数据库实例

    楼上都是神仙吗, 90% 的单测, 话说你们的业务都很简单?
    Merlini
        42
    Merlini  
       64 天前
    写,时间紧的话就先延后,找时间补上。
    Ryan7sz
        43
    Ryan7sz  
       64 天前
    @seth19960929 同感,业务复杂的项目能做到百分之六七十的覆盖率就费了老劲了,太多的 stub 、mock 用例不仅写起来复杂而且测试的意义也大打折扣,很多时候就是为了完成 KPI
    Desdemor
        44
    Desdemor  
       64 天前
    会的,后续业务有改动或者优化,或者有啥 bug 还是单测方便的
    wqhui
        45
    wqhui  
       64 天前
    尽量覆盖主流程的简单情况,涉及外部系统就很难搞了
    onichandame
        46
    onichandame  
       64 天前
    无副作用的核心方法必须单测。涉及数据库等外部操作的就等集成测试再说。单测覆盖率低的原因大概率是抽象不好,外部操作在核心业务逻辑中侵入太深
    LichMscy
        47
    LichMscy  
       64 天前
    我们硬性要求 单测覆盖率增量 80% 低于则无法 MR
    写业务代码和写单测时间 3:7
    noyidoit
        48
    noyidoit  
       64 天前
    会给业务写集成测试,但单测基本没机会写。不写单测的原因有两个,一是我们的业务很少拆分成可测试的独立单元;二是我不想 mock 任何跟 io 相关的东西
    mb4555
        49
    mb4555  
       64 天前
    😂测试代码要好写 业务代码得先写好
    xueyuehua
        50
    xueyuehua  
       64 天前
    其实我一直不明白单元测试有什么意义,因为我一定会让单元测试能跑通的,感觉就是有点倒果为因
    asasjajsajsd
        51
    asasjajsajsd  
       64 天前
    不忙就写,忙就算了; 天天加班的时候,就不写了
    LitterGopher
        52
    LitterGopher  
       64 天前
    当代码可测的时候。
    iyaozhen
        53
    iyaozhen  
       64 天前
    主动,但覆盖率不太高,核心的地方写一下。作用还是很大的
    iyaozhen
        54
    iyaozhen  
       64 天前
    @xueyuehua 有意义呀 能让你放心大胆改底层代码
    特别是一些工具方法

    当然要区分系统集接口测试和单测
    zmcity
        55
    zmcity  
       64 天前
    必须写。
    因为写单测对代码结构是有要求的,比如代码耦合必须使用接口,哪怕想偷一点懒在写代码的时候没有考虑过测试,后续的代码就都完全没法写单测了。
    然后改代码的成本就会越来越高,直到整个代码完全不可修改。
    SoviaPhilo
        56
    SoviaPhilo  
       64 天前
    @seth19960929 如果 mock 了数据库,建议是把这部分直接和业务逻辑剥离, 还更靠谱些。
    seth19960929
        57
    seth19960929  
       64 天前
    @SoviaPhilo 抽离了就得去实现一套数据库操作层, 不管是 mock 还是 faker 一个数据库连接, 都是为了写所谓的数据库操作层 (不应该为了写测试而写测试)
    seth19960929
        58
    seth19960929  
       64 天前
    @Ryan7sz 对, 有时候有些依赖直接写死了, 根本测不出内部返回的错误, 然后自己去封装一层再写测试, 这就有点为了测试而测试了
    @xueyuehua 写了之后, 下次别人接手你的代码可以提前发现错误 >_
    tracebundy
        59
    tracebundy  
       64 天前
    必须写
    oczizx
        60
    oczizx  
       64 天前
    必须写 感觉是为了测试而测试 甚至上了所谓的变异测试 非常离谱
    业务与测试 3:7 甚至 2:8
    可能是因为主要是存量业务的原因吧
    Seayon
        61
    Seayon  
       64 天前
    @seth19960929 #41 testcontainers
    seth19960929
        62
    seth19960929  
       64 天前 via Android
    @Seayon 我不用这个,侵入式的这个。我用 go-mysql-server ,或者直接 gitlab ci 启动一个容器就好
    NX2023
        63
    NX2023  
       64 天前
    @Seayon 我们组也是用这个,加上 gomonkey 给其他函数打桩,感觉够了
    glcolof
        64
    glcolof  
       64 天前
    游戏相关的项目,大部分功能没办法写单元测试,因为它们依赖的条件太多,无法构成一个“单元”,只有功能单一偏向于数值计算的函数会写单元测试。
    所以游戏行业很依赖测试团队,以及内测公测之类的大规模用户测试。
    monkeyk
        65
    monkeyk  
       64 天前
    @maninfog 同感;没单元测试的核心代码是没信心的。
    Seayon
        66
    Seayon  
       63 天前
    @seth19960929 #62 怎么理解 Testcontainers 侵入的?我以为这个已经尽量不侵入了
    seth19960929
        67
    seth19960929  
       61 天前   ❤️ 1
    @Seayon #66 直接通过 ci 启动对应的依赖, 测试还是直接连接服务呀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1160 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:58 · PVG 06:58 · LAX 14:58 · JFK 17:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.