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

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

  •  1
     
  •   t4we · 8 天前 · 6226 次点击

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

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

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

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

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

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