有哪个开源项目,单元测试用例覆盖的比较全的?

2020-06-16 10:04:02 +08:00
 fff333
希望参考下,做个模版。
7106 次点击
所在节点    Java
37 条回复
guyeu
2020-06-16 10:09:24 +08:00
基本上每个被广泛使用的 java 项目单测都很全。。。
gzfrankie
2020-06-16 10:15:15 +08:00
Java 任意项目
Python Openstack
Go Kubernetes
VDimos
2020-06-16 10:25:35 +08:00
rust 稍微大型点儿的项目继承和单元都做得不错
hantsy
2020-06-16 10:33:48 +08:00
主流的 Java 框架都是基本上有写很全面的测试,Hibernate 系列,Spring 下各子项目。
hantsy
2020-06-16 10:41:03 +08:00
Java EE/Jakarta EE 测试起步有兴趣可以看看我的文章,https://medium.com/swlh/testing-jakarta-ee-8-applications-9ca250da20e3

Github 链接:
https://github.com/hantsy/jakartaee8-starter/blob/master/docs/04test.md

当然我相信国内 90%开发人员都是从来不写测试的。
hanxiV2EX
2020-06-16 12:38:11 +08:00
openresty
VDimos
2020-06-16 12:40:24 +08:00
@VDimos 没注意是 java 下面的帖子,java 的话很多都有单测的吧。
ChanKc
2020-06-16 13:08:45 +08:00
openjdk
guava
Apache commons
一般最主流最基础的工具包的都会全吧
williamfzc
2020-06-16 13:09:11 +08:00
自己的 python,覆盖率到一定程度之后还是蛮有用的
https://github.com/williamfzc/stagesepx
dilu
2020-06-16 13:25:19 +08:00
@hantsy 我觉得是 99.99%
hantsy
2020-06-16 13:55:12 +08:00
@dilu 嗯,以前我在公司上班时候推过 JUnit,结果一半人明确反对,剩下的人反正没过用不知道行不行,没意见,结果都是不了了之。一个项目代码累积起来后,测试代码的作用就体现出来了,在 CI 上跑一遍的时候,几乎所有的场景都 replay 一遍,保证新加代码自己没问题,也不会桶了其它人的工作。之前为什么要想到用 JUnit,其主要原因也是这个,我的代码经常被报问题,结果 10 之 8,9 都是被别人捅了,破坏了一些约束。

现在国内一些开发人员,比如 API 的测试,很多愿意手动测试,用 PostMan,什么 Swagger 界面,只能片面的测试到一些问题,而且一直不停重复手动输入数据测试。我一直在想的一个问题,天天这样重复测试,自己不感觉烦吗?

我一直认为 PostMan,Swagger 是给前端或者非技术测试人员( UAT )用的,在国内居然现在是开发人员的标配。

现在我也很矛盾,国内有些朋友介绍一些项目一看那个样子,我根本就不想介入。国外能做的项目,今年越来越少了,已经空好久了。
littlewing
2020-06-16 13:56:55 +08:00
mysql
williamfzc
2020-06-16 14:13:01 +08:00
@hantsy 同意,单测大概率是推不动的,一般有这几个原因:

- 项目安排不会预留写单测的时间
- 一般都有测试兜底,做不做无所谓
- 自测 or 质量流程稀烂

基本是个恶性循环,除非项目愿意让步 or 有个比较有魄力的人来下决定。开源社区这类东西做得好一般也就是上面三点做得好:

- 没项目压
- 没测试,自己兜底
- 流程相对严谨

比起单测,我觉得覆盖率反而是个比较值得推的东西。
dayeye2006199
2020-06-16 14:24:04 +08:00
好像但凡正经点的开源项目,都有单元测试覆盖把。。啥也没有别人也不敢用把。。
afc163
2020-06-16 14:27:14 +08:00
dilu
2020-06-16 15:30:21 +08:00
@hantsy 因为绝大多数项目都是商业项目,业务代码的目的很明确:快速挣钱

单元测试在"快速挣钱"这件事上并没有太大帮助,因此一旦有了一点点的阻力立马就会被放弃

毕竟没有单元测试,又不耽误挣钱
Rwing
2020-06-16 15:37:57 +08:00
所以需要 TDD
hantsy
2020-06-16 15:49:40 +08:00
@williamfzc 业务类型项目,cov 我觉得倒不是刻意去追求。比如 Spring 中,有些代码一开始可以从 coverage Excludes 掉,如 POJO (只有 Getter and Setters ),空的 Repository,一些 Configuration 等,一般测试能跑到 70,80% cov 还是很容易的。

1,主要要包含所有的可能的路径,比 /posts/{id} ,200 的返回结果与 404 都是要确认。要确认权限的有登录,未登录,切换 Role 等。
2,单元测试很多只是测试 Block 逻辑正确性,集成测试加上去,实际上很多测试部分重叠起来了。比例 PostController, 单纯的测试其逻辑功能可以在 Mock Web 环境跑,用 Mockito 之类的来隔离依赖(数据库等,其他调用)。https://github.com/hantsy/spring-reactive-jwt-sample/blob/master/src/test/java/com/example/demo/PostControllerTest.java,但同样的功能还是要跑一次集成测试确定所有功能在真实环境中有效: https://github.com/hantsy/spring-reactive-jwt-sample/blob/master/src/test/java/com/example/demo/IntegrationTests.java
KeyboardManAnAn
2020-06-16 17:50:45 +08:00
Realm 移动端数据库测试覆盖比较全
asanelder
2020-06-16 18:31:34 +08:00
@hantsy 干公司的活,如果自己不是 leader 或是有什么话语权的话,还是随大流吧。

虽然单元测试俺认为很重要,但是如果 leader 和其它人认为不重要,那就是不重要了。

在公司工作,就要和组内的同志以及 leader 保持观念上的一致,无论这个观念你认不认同。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/681939

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX