请教下各位大佬 关于单元测试的问题

2021-03-10 10:33:21 +08:00
 www5070504

最近遇到几个不知道如何解决或者没有方向的问题 想请教下各位同仁

一是各位平时写代码的时候会写单元测试么, 或者现在写单元测试的人还多么. 现在为了快速上线, 我这里基本没写过单元测试,各位平时是怎么做的呢.

二是在单元测试中不知道各位有没有遇到过无法断言的情况, 比如我一个函数会生成一些二进制数据, 我不知道如何断言这个函数产生的结果是合法的数据. 或者比如一个函数产生一些网络数据包, 但是断言的时候没办法进行比较,因为返回值是不容易预测的.

求各位指教,谢谢各位啦

5323 次点击
所在节点    程序员
67 条回复
l8g
2021-03-10 10:42:56 +08:00
一般不会追求覆盖率,就测一下接口通不通,返回值是否符合预期。(其实大部分情况都不写🐶)
主要还是看公司的规范吧,有的公司是明确要求写且覆盖率有要求的。
www5070504
2021-03-10 10:50:56 +08:00
诶 append 找不到了

请大家畅所欲言吧 不过我估计大家平时是不是都不咋写单测...
chendy
2021-03-10 10:52:37 +08:00
java 农,基本上只对“复杂的业务逻辑”,“重要的业务逻辑”和“工具类”写 UT
接入层不测,数据库和外部接口访问 mock 掉,只测业务逻辑
meshell
2021-03-10 10:55:12 +08:00
只测试通不通🐶
jaylee4869
2021-03-10 11:02:34 +08:00
对于第二点,问的太笼统了。。。为啥返回不能预测?难道这个函数使用了系统外部的 API ? mock 一些不确定的输入吧,setup 。
www5070504
2021-03-10 11:09:23 +08:00
@jaylee4869 就是比如我现在有一个函数 foo,这个函数会产生一串网络数据包 但是我不知道怎么来进行断言

比如 assert foo() == value 这里 value 就不不知道该写什么 除非我是把这一串网络数据包都转换成可读文本然后放在 value 的位置

这个问题我描述起来确实有点笼统, 不知道怎么表达好...
www5070504
2021-03-10 11:09:51 +08:00
@meshell 我目前也是, 基本都是自测下通不通 正常调用流程就完事了..
ruoxie
2021-03-10 11:18:48 +08:00
我看有些开源项目所谓的单元测试就是测 1===2 , 有什么意义呢
www5070504
2021-03-10 11:21:15 +08:00
@ruoxie 不知道啊 但是有时候感觉这玩意在 ci/cd 中能用到, 就自动跑测试啥的
ayase252
2021-03-10 11:30:05 +08:00
就二来说吧,不可能无法预测啊,无法预测说明对函数的职责是不清晰是。如果函数依赖了一些随机因素或者外部因素,把它们 mock 掉就好了
EKkoGG
2021-03-10 11:35:10 +08:00
我之前也有同样的疑惑,感觉业务类的有点难做单测,比如一个接口 其实就是数据库的增删改查,mock 掉感觉好像就没测试的必要了
newmlp
2021-03-10 11:37:39 +08:00
不写,没时间
Chenamy2017
2021-03-10 12:29:57 +08:00
单元测试我感觉是理论上的,编码十几年还真没有看到进行单元测试的,包括某为。
Mistwave
2021-03-10 12:35:32 +08:00
1. 单测不是测 bug,是帮助你 design
2. mock 外部依赖;或者将副作用抽出去,专注核心逻辑
GeruzoniAnsasu
2021-03-10 12:40:13 +08:00
单测是用来保证设计与实现一致而不是用来保证逻辑正确的

比如设计上这个函数收到 A 应该返回 B,那单测就给它喂个 A 看能不能收到 B

“理论上这个函数应该只能收到 A” 于是 试图测试是不是真的只能收到 A 这种测试不在单元测试范畴内。
GeruzoniAnsasu
2021-03-10 12:43:33 +08:00
@www5070504 对于 #6 提到的场景,如果要做单元测试,那么思路是

1. 前提:确定 receiver 的正确性
2. 把 foo 产生的 value 喂给 receiver,在 receiver 上断言行为符合预期
3. 如果 1 不能确定,递归拆解问题
supermao
2021-03-10 12:48:25 +08:00
单元测试,能测出 bug 来还需要写么
写的单元测试都是你能想到的并且不会错的
www5070504
2021-03-10 13:09:21 +08:00
@GeruzoniAnsasu 多谢 我有点理解了
dayeye2006199
2021-03-10 13:39:04 +08:00
不写单测一时爽,重构送入火葬场。所以大家的 ci 没有单测,都是运行一些啥逻辑?
learningman
2021-03-10 13:43:57 +08:00
单元测试拿来入门一些不写或者乱写文档的开源项目挺好用的

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

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

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

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

© 2021 V2EX