有没有大佬告诉我单元测试用在哪里?这个问题困扰我好久了

2025 年 7 月 18 日
 tiRolin

在学习的时候就经常听人说单元测试很重要,但是我每次看单元测试我都没搞懂这跟我手动 API 测试有啥区别?我感觉单元测试还更麻烦了,因为单元测试还需要自己创建测试数据自己测试核心逻辑和业务逻辑,我手动 API 测试不也能走一遍吗?然后说是单元测试更全面,但是我看单元测试的用例也是要我手写啊,这两个真有区别吗?

而且单元测试比手动调 api 测试麻烦好多,比如说我现在在做的菜单树功能,我不太理解单元测试我就让 cursor 帮我生成,他框框一顿写就已经有四百行代码了,这要是人力来写这不是写单元测试的时间都要比写功能本身还要花更久的时间了吗?

是不是实际开发的时候其实大多数简单功能,比如说我的菜单树是不会进行单元测试的,只会做简单的自测,而对于确实很复杂有必要长期维护的核心功能比如支付这种才对做单元测试?

7408 次点击
所在节点    Go 编程语言
59 条回复
irisdev
2025 年 7 月 18 日
起码有两个场景作用很大。1.你要改某个核心算法或者方法,改完之后单元测试跑一遍就知道有没有改坏,没有单元测试就很麻烦 2.单元测试相当于自描述的接口文档了,一般看到测试用例就知道这个方法干啥的,以及哪些场景可能会有坑
trycatch
2025 年 7 月 18 日
单元测试核心是“单元”。
大多数人的代码是不可测试的。
要想写单元测试,首先让代码可测试,这个过程就优化了代码的结构设计。
sampeng
2025 年 7 月 18 日
是没用,很多公司不给写单测时间。
但是,但凡你改开源代码,面对几十万行不是你写的代码,你靠什么保证你改的东西不影响别人呢
wanniwa
2025 年 7 月 18 日
我一开始也抗拒单测,后来发现当有功能改动漏了什么场景,单测一下就能帮我发现问题,救了好几次命
edisonwong
2025 年 7 月 18 日
不写单测,后人都不知道影响面以及怎么去 mock 、测,靠 api ?复杂情况下你都不知道什么的对的,什么是错的
MrVito
2025 年 7 月 18 日
@cxe2v #12 不不不,实际中的现实:上线后,跑步进入下一个需求,过了十天半个月,欸,那谁谁谁,之前的那个需求,你补下测试、文档,输出下报告,下班前给我哈
COW
2025 年 7 月 18 日
从你第一句开始,我大概能猜到,你大概率是用错了。
比如你有一个复杂的表单查询 API ,你通常并不需要去写单元测试去测这个 API ,去模拟各种参数传入调用 API ,这没有必要,这种场景通常用 postman 、jmeter 这类工具去做就可以了。
单元测试通常是测 API 内部的业务逻辑,也就是针对模块化出来的代码单元去进行测试,当然并不是每个业务逻辑都需要测,涉及非常复杂的业务,你也可以先写单元测试,再写具体的代码逻辑。
fregie
2025 年 7 月 18 日
如果你觉得没什么用,说明你不需要
等项目规模大了,自然就会觉得需要了
reatang
2025 年 7 月 18 日
调 API 的测试已经算是一种集成测试了。
单元测试主要用在对原子功能的边界进行测试。
yjxjn
2025 年 7 月 18 日
你大概率理解错什么是单元测试了。
单元测试是用于验证函数或方法的准确性。你也可以理解为测试范围只是局部的。
只要是写的代码就有 bug ,那你如何通过不跑整体,来验证局部代码的正确性呢?你也不可能,100 个模块,你改了 1 个模块,你就让人家负责别的模块的人来帮你一起联调测试吧。
手动调 api 测试,这已经不是单体测试范围了,是系统测试了。
这才是一个正规发布流程。
Request->Dev->UT>IT->ST->UAT->PreProd->Prod
windyboy
2025 年 7 月 18 日
单元测试就是吧大,复杂问题转化为多个小的简单问题,逐步解决问题
WilliamColton
2025 年 7 月 18 日
@yjxjn #29 新手请问一下集成测试和系统测试有什么区别啊?看了一些文章都没理解
wakarimasen
2025 年 7 月 18 日
本意是好的,只不过业务变动频繁最后会导致你需要给测试代码编写测试。
importmeta
2025 年 7 月 18 日
那些开源项目, 很多都有单元测试啊, 一方面有用, 另一方面会显得很专业.
之前上班公司大佬自己写框架, 也会自己写单元测试.
udisyue
2025 年 7 月 18 日
单元测试测的是你的代码段有没有问题,而 api 测试通常可能跑完了某一个业务中的部分流程,数据流过了一个或多个服务流转
如果你的 api 非常简单就是接受数据,然后做个增删改查排序什么的然后返回,那测起来确实跟单元测试没什么区别
如果你的 api 会要调用其他服务走业务流程,那就有区别了
nxforce
2025 年 7 月 18 日
单元测试最重要的是那个上下文,然后测试的颗粒度可以细分到 method ,并且不依赖业务代码。
BenHunDun
2025 年 7 月 18 日
当业务复杂的时候, 测试用例一多, 你修改代码后.
跑单测可能一下子就结束了, 但是手动测试太麻烦了.
kneo
2025 年 7 月 18 日
我自己写的小项目就有几千个单元测试。我几分钟全跑完。

我雇你手动跑,一分钟测一个,一天八小时只能测 480 个,一个月 20 天能测一万个。我一个月给你五千块工资,只能给我跑两次完整测试。然后你还总糊弄。实际上这一万次测试的报告,有一千例结果是真的就不错了。信你我不如自己写自动化测试。AI 也能写。别管 AI 蠢不蠢,至少是真干活,还便宜。
user1284
2025 年 7 月 19 日
不是一边写代码一边就写测试, 然后通过测试函数来测试到底能不能跑吗, 一般一个大功能就写一个测试函数
ethusdt
2025 年 7 月 19 日
做好一个功能,这个功能是否能用,通过单元测试走一遍,这就像 FF 的概念,输入必定有固定的输出。

有时候看别人的库,直接从他的库的单元测试里面“拷贝”其中的 example 实现,比如可以直接这样:

https://github.com/kishikawakatsumi/SMBClient/blob/main/Tests/SMBClientTests/SMBClientTests.swift

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

https://v2ex.ih06.com/t/1146114

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

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

© 2021 V2EX