6

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

 3 years ago
source link: https://www.v2ex.com/t/786964
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  Jiangyf · Encounter77 · 1 天前 · 2353 次点击

测试框架推荐?

  • Junit
  • PowerMock

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

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

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

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

第 1 条附言  ·  19 小时 29 分钟前

有木有大厂的大佬,讲讲关于测试的内容呗~~
26 条回复    2021-07-03 00:17:57 +08:00

thetbw

thetbw   1 天前

同求,公司没测试

joesonw

joesonw   1 天前 via iPhone

看测试覆盖率呀。设立一个目标覆盖率,然后测试达标呗。

dustinth

dustinth   1 天前

先看看这本书. Unit Testing Principles, Practices, and Patterns

MeatIndustry

MeatIndustry   1 天前

推荐了解一下测试驱动开发 TDD 。用 Mockito,Junit TDD 一个 SpringBoot 项目,你上面的问题都能多少得到解答。

scxiazi

scxiazi   1 天前

junit

xy90321

xy90321   1 天前 via iPhone

传统软件企业
waterfall 开发项目
junit ➕ dbunit ➕ jmockit
要求 C1➕C2 100%覆盖

Cbdy

Cbdy   1 天前

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

stimw   1 天前 via Android

记得很多年前有篇文章叫 TDD 已死。。

Rocketer

Rocketer   22 小时 48 分钟前

先写测试程序,输入是什么,输出应该是什么,都准备好。然后正式开始写程序,自己的程序必须能通过自己的测试,才能移交给下一环节。

问题是写单元测试程序的时间比写正是程序的时间还长,出错的程序又是少数,所以虽然书上说单元测试能节约开发时间,但我们没人信。老板不要求,绝对没人写。

micean

micean   21 小时 38 分钟前

crud 不写什么单元测试,毫无意义
但是写 lib utils 的一定要写单元测试

dalaomai

dalaomai   21 小时 6 分钟前

@micean 请教为啥 CRUD 单元测试毫无意义?

X0ray

X0ray   21 小时 2 分钟前

@xy90321 请教下,C1 和 C2 分别是啥?

X0ray

X0ray   21 小时 2 分钟前

@thetbw 单元测试是开发的职责

micean

micean   20 小时 57 分钟前

@dalaomai

直接操作数据库检查 sql,mock 没有多大意义

MeatIndustry

MeatIndustry   20 小时 57 分钟前 via iPhone

@stimw 不光 TDD,还有其他敏捷实践,例如结对编程,也有很大争议。一个个看起来十分美好,实际上做起来寸步难行。在公司就试过 TDD,根本坚持不下去

X0ray

X0ray   20 小时 52 分钟前

通常来说,以 java web 项目为例,我都是在 service 这一层来做单元测试。其他的工具类也会写下。远远达不到 100%的覆盖率。
我还比较好奇,那些大厂是不是都是严格执行覆盖率审查的。

Jiangyf

Jiangyf   19 小时 35 分钟前

@thetbw 唉,可要命了~~

Jiangyf

Jiangyf   19 小时 33 分钟前

@dustinth 看到英文书名就头大~~

Jiangyf

Jiangyf   19 小时 32 分钟前

@MeatIndustry 我觉得测试驱动开发,有一说一,很多时候受制于时间、成本、进度三座大山,没多少人 care 测试这一环节。

Jiangyf

Jiangyf   19 小时 31 分钟前

@Rocketer 深有体会~

Jiangyf

Jiangyf   19 小时 28 分钟前

@stimw 没有技术或理论是银弹~

EKkoGG

EKkoGG   19 小时 15 分钟前

我也问过类似问题,但是感觉 web api 的单元测试资料好少。。。就没人弄个 demo,看看怎么实现的吗?

z740713651

z740713651   12 小时 52 分钟前

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

inhzus   11 小时 15 分钟前 via iPhone

单测增量行覆盖率 80%,junit4 + powermock,需求不紧急的情况下严格 TDD,CRUD 的话确实没什么意义

yjxjn

yjxjn   6 小时 3 分钟前

500 强外企路过,公司要求,开发写完代码,开发做 JUNIT 测试,功能测试看情况,如果测试不够,就开发一块做了。
junit 的要求是用 excel 投入数据,然后用 excel 做期待数据和期待值等等,assert 异常这种的之类的,再就是要求覆盖率,必须达到 C1 级别,目标是 100%全覆盖。branch 都要进去,eclipse 的 coverage 要去看 branch 覆盖率,而不是 instruction 的覆盖率,如果达不到 100%,需要分析一下,到底是设计的业务有问题还是代码的问题。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK