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

不懂就问,各位都是怎么进行单元测试(UT)的?

  •  
  •   Jiangyf · 2021-07-01 17:34:55 +08:00 · 4816 次点击
    这是一个创建于 1249 天前的主题,其中的信息可能已经有所发展或是发生改变。

    测试框架推荐?

    • Junit
    • PowerMock
    • ...

    单元测试的要求是啥样的呢?

    如何去组织和具体实施,有木有啥具体标准之类的?

    关于测试的其他(性能测试等),如何成为一个合格的测试?

    小弟 Java curd boy,希望从事相关行业的大佬不吝赐教,小弟感激涕零,蟹蟹~~

    第 1 条附言  ·  2021-07-02 10:51:12 +08:00
    有木有大厂的大佬,讲讲关于测试的内容呗~~
    27 条回复    2021-07-05 10:05:21 +08:00
    thetbw
        1
    thetbw  
       2021-07-01 19:56:41 +08:00
    同求,公司没测试
    joesonw
        2
    joesonw  
       2021-07-01 21:47:37 +08:00 via iPhone
    看测试覆盖率呀。设立一个目标覆盖率,然后测试达标呗。
    dustinth
        3
    dustinth  
       2021-07-01 21:50:51 +08:00
    先看看这本书. Unit Testing Principles, Practices, and Patterns
    MeatIndustry
        4
    MeatIndustry  
       2021-07-01 22:55:59 +08:00
    推荐了解一下测试驱动开发 TDD 。用 Mockito,Junit TDD 一个 SpringBoot 项目,你上面的问题都能多少得到解答。
    scxiazi
        5
    scxiazi  
       2021-07-01 22:58:49 +08:00
    junit
    xy90321
        6
    xy90321  
       2021-07-01 23:26:36 +08:00 via iPhone
    传统软件企业
    waterfall 开发项目
    junit ➕ dbunit ➕ jmockit
    要求 C1➕C2 100%覆盖
    Cbdy
        7
    Cbdy  
       2021-07-01 23:59:09 +08:00
    Spring 项目:
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    非 Spring 项目:
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
    stimw
        8
    stimw  
       2021-07-02 00:31:51 +08:00 via Android
    记得很多年前有篇文章叫 TDD 已死。。
    Rocketer
        9
    Rocketer  
       2021-07-02 07:32:41 +08:00
    先写测试程序,输入是什么,输出应该是什么,都准备好。然后正式开始写程序,自己的程序必须能通过自己的测试,才能移交给下一环节。

    问题是写单元测试程序的时间比写正是程序的时间还长,出错的程序又是少数,所以虽然书上说单元测试能节约开发时间,但我们没人信。老板不要求,绝对没人写。
    micean
        10
    micean  
       2021-07-02 08:42:22 +08:00
    crud 不写什么单元测试,毫无意义
    但是写 lib utils 的一定要写单元测试
    dalaomai
        11
    dalaomai  
       2021-07-02 09:14:05 +08:00
    @micean 请教为啥 CRUD 单元测试毫无意义?
    X0ray
        12
    X0ray  
       2021-07-02 09:18:16 +08:00
    @xy90321 请教下,C1 和 C2 分别是啥?
    X0ray
        13
    X0ray  
       2021-07-02 09:19:02 +08:00
    @thetbw 单元测试是开发的职责
    micean
        14
    micean  
       2021-07-02 09:23:21 +08:00
    @dalaomai

    直接操作数据库检查 sql,mock 没有多大意义
    MeatIndustry
        15
    MeatIndustry  
       2021-07-02 09:23:24 +08:00 via iPhone
    @stimw 不光 TDD,还有其他敏捷实践,例如结对编程,也有很大争议。一个个看起来十分美好,实际上做起来寸步难行。在公司就试过 TDD,根本坚持不下去
    X0ray
        16
    X0ray  
       2021-07-02 09:28:13 +08:00
    通常来说,以 java web 项目为例,我都是在 service 这一层来做单元测试。其他的工具类也会写下。远远达不到 100%的覆盖率。
    我还比较好奇,那些大厂是不是都是严格执行覆盖率审查的。
    Jiangyf
        17
    Jiangyf  
    OP
       2021-07-02 10:45:48 +08:00
    @thetbw 唉,可要命了~~
    Jiangyf
        18
    Jiangyf  
    OP
       2021-07-02 10:47:34 +08:00
    @dustinth 看到英文书名就头大~~
    Jiangyf
        19
    Jiangyf  
    OP
       2021-07-02 10:48:42 +08:00
    @MeatIndustry 我觉得测试驱动开发,有一说一,很多时候受制于时间、成本、进度三座大山,没多少人 care 测试这一环节。
    Jiangyf
        20
    Jiangyf  
    OP
       2021-07-02 10:49:33 +08:00
    @Rocketer 深有体会~
    Jiangyf
        21
    Jiangyf  
    OP
       2021-07-02 10:52:35 +08:00
    @stimw 没有技术或理论是银弹~
    EKkoGG
        22
    EKkoGG  
       2021-07-02 11:05:20 +08:00
    我也问过类似问题,但是感觉 web api 的单元测试资料好少。。。就没人弄个 demo,看看怎么实现的吗?
    xy90321
        23
    xy90321  
       2021-07-02 13:40:09 +08:00 via iPhone
    z740713651
        24
    z740713651  
       2021-07-02 17:28:55 +08:00
    python 的我比较熟。。。

    python 可以试试这个项目模版生成的项目框架去填业务代码
    [https://github.com/AngusWG/cookiecutter-py-package]


    ```
    pip install cookiecutter
    cookiecutter https://github.com/AngusWG/cookiecutter-py-package.git
    ```

    单元测试的有 pytest (可选 doctest) doctest 写函数 docstring 用着比较开心的 看着也舒服

    然后 CICD 得搞上
    每次提交的时候 都能检查代码覆盖率 函数运行速度 响应时间等等
    在模版里有都有案例

    然后是 python 的代码风格
    迫于没得选就 black 代码风格测试

    - 单元测试的要求是啥样的呢?
    代码覆盖率 80+把
    高一点要求 100% 不过分的
    框架会帮你多跑几遍函数 在单元测试里设置平均时长和最大时长啥的就好了

    - 如何去组织和具体实施,有木有啥具体标准之类的?
    提交代码 CICD 过上述的测试+代码风格测试就差不多了 系统级测试让测试工程师去做
    标准之类这种可以看开源项目的要求
    github 开源项目基本上 Action 都会有提交时要过的测试命令 照着抄就好了
    ( python 里是 flake8 模版里还有很多奇奇怪怪的插件 也可以都用上)

    - 关于测试的其他(性能测试等),如何成为一个合格的测试?
    这个我也不会。。。。

    写完了发现可能答非所问....大佬们随便看看就好
    inhzus
        25
    inhzus  
       2021-07-02 19:05:42 +08:00 via iPhone
    单测增量行覆盖率 80%,junit4 + powermock,需求不紧急的情况下严格 TDD,CRUD 的话确实没什么意义
    yjxjn
        26
    yjxjn  
       2021-07-03 00:17:57 +08:00
    500 强外企路过,公司要求,开发写完代码,开发做 JUNIT 测试,功能测试看情况,如果测试不够,就开发一块做了。
    junit 的要求是用 excel 投入数据,然后用 excel 做期待数据和期待值等等,assert 异常这种的之类的,再就是要求覆盖率,必须达到 C1 级别,目标是 100%全覆盖。branch 都要进去,eclipse 的 coverage 要去看 branch 覆盖率,而不是 instruction 的覆盖率,如果达不到 100%,需要分析一下,到底是设计的业务有问题还是代码的问题。
    Jiangyf
        27
    Jiangyf  
    OP
       2021-07-05 10:05:21 +08:00
    @inhzus CRUD 意义不大是不是在于可预见结果就是成功或者失败,所涵盖分支的情况可能没有那么复杂,相比复杂的接口实现逻辑,单纯的 CRUD 显得没有那么的重要了,这样理解可以吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2616 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.