作者tofuflower (无)
看板Soft_Job
标题Re: [请益] 测试程式问题
时间Mon Jul 15 00:16:59 2019
※ 引述《VFCanisLupus (CanisLupus)》之铭言:
: 请教一下版上前辈测试方面的问题
: 我们公司的产品是有着微服务架构的後端服务,最近想导入测试但是在开会时对於测试的方
: 式与方向跟夥伴们有些意见分歧,想听听版上前辈的意见。
: 1. 单元测试: 我的想法是单元测试是针对每个method做测试目的是希望每个method都能符
: 合预期不会改a错b. 单元测试也不应该与外部相依,比如说资料库应该都用mock DAO 的方
: 式来测试。
: 不过夥伴认为我们应该也要连sql都一起测试,不然我怎麽知道sql是否正确?(意见不同1)
: ,写测试程式很容易因为测试案例不好而导致测试测的不完全,写这测试会很没意义(意见
: 不同2)
1. 个人偏好做法:DAO 层的任务是跟 DB 沟通,这里的 unit test 我会测 SQL。
商务层应该只关心商务逻辑,直接 mock DAO 层。这是来自单一责任原则的启发。
2. 你可以找一下你们使用的语言有没有用来跑单元测试的 embeedded db/mongo/redis。
如果没有的话可以考虑跑单元测试时用 docker 跑 db 起来测试。
3. 发现自己测试没写好,进而反省改善就是种意义。当然,这仅止於懂的反省自身的
工程师。
: 2. 整合测试: 老板认为有单元测试只不过方便日後重构而已,还不如来写整合测试(打HT
: TP request 测试) (意见不同3)
unit test 除了验证程式行为还有其他好处:
1. 未来改逻辑或加 feature 你会比较有勇气。你可以想像你每次想修改一段逻辑,
都要等整合测试跑个十几分钟才能得到反馈,是我都没勇气改了。
2. 好测试的 code 通常程式架构会比较好改:为了让程式好测/可测,你会让程式
耦合性降低,让功能责任单一,甚至你会更明确知道 DI 的重要性。
3. 有测试的 code 等於一份该 component 的使用教学,像我就会从前人的测试 code
学业务逻辑。
4. 整合测试涵盖范围太广,一个测试失败可能是网路/系统/设定/程式码任何一个地方
出问题;反观单元测试执行速度快,又可以快速定位问题。好单元,不测吗?
以上个人不负责任经验谈。
: 我的想法是
: 意见1: 可以延到整合测试测,因为单元测试目的是在於验证程式码有无如预期进行,且应
: 该要可以快速测试验证。
: 意见2: 可以用测试覆盖率为参考依据
: 意见3:因为整合测试无法有效提昇覆盖率,且有环境等因素考量,也跟业务逻辑牵扯 (塞
: 资料顺序等等),反而门槛更高。
: 不知道版上前辈有什麽其他想法吗?
: 或者其实我观念有错误?
: 谢谢
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 27.242.203.105 (台湾)
: ※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1563110242.A.161.html
: 推 jack0204: 单元测试也能测SQL阿,有的框架支援记忆体储存ORM 07/14 21:42
: 是指记忆体型的db吗? 但我们用的是mybatis这种object mapping 的框架,用的是MySQL
: 怕有些MySQL 特有的语法会不支援, 再来我们还有其他微服务用到mongodb and redis
: 推 art1: 测得不完全也比完全不测好 07/14 21:43
: 是没错
: → jack0204: 不然就是建一个stage环境配migrate执行完整测试 07/14 21:43
: → jack0204: 如果测试案例不好那就把他写到好阿,不然写爽的腻? 07/14 21:44
: 是阿 不过现况是公司有一半的成员是junior 可能要费点心思了
: → jack0204: 整合测试是因为测一整次很花时间,单元测试就快多了 07/14 21:45
: 推 jack0204: 单元(纯逻辑)/功能(假DB)/整合测试看你们想做到哪一步 07/14 21:51
: → pigcat1315: 没SDET部门就坐单元测试就好 不然测试的庞大你写不完 07/14 21:55
: 我也这样认为,但老板认为 整合测试是要给工程师写的,不过在资源有限的公司里确实也
: 是这样就是了
: 推 sojoasd: 小的浅短的建议:专案还在开发阶段时,写测试DB比较好, 07/14 22:04
: → sojoasd: 因爲这时期schema可能常常变动,当然就是比较麻烦。另外 07/14 22:04
: → sojoasd: 串接微服务可能改成其他排程task定时执行测试会比较好 07/14 22:04
: → sharku: 单元测试也可以测SQL 看你後端用什麽框架而定 07/14 22:08
: 单元测试也可以测试sql吗 小弟去研究看看
: ※ 编辑: VFCanisLupus (27.242.203.105 台湾), 07/14/2019 22:47:00
: ※ 编辑: VFCanisLupus (27.242.203.105 台湾), 07/14/2019 22:50:39
: 推 supernow: 我们这边单元测试不直接打db,是直接mock掉只验sql语法 07/14 22:52
: → supernow: ,跟你的想法一样,另外在整合测试里才实际连db 07/14 22:52
: ※ 编辑: VFCanisLupus (27.242.203.105 台湾), 07/14/2019 22:53:39
: ※ 编辑: VFCanisLupus (27.242.203.105 台湾), 07/14/2019 22:55:13
: 推 supernow: 至於测试案例写不好这只能靠code review多电几次才能改 07/14 22:55
: → supernow: 善 07/14 22:55
: 了解 感谢回覆
: ※ 编辑: VFCanisLupus (27.242.203.105 台湾), 07/14/2019 22:57:20
: ※ 编辑: VFCanisLupus (27.242.203.105 台湾), 07/14/2019 22:58:05
: 推 sharku: 单元测试的DB只在执行时产生 测试完後删除 不连到实体DB 07/14 23:15
: → pass78: h2 07/14 23:20
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.215.240.201 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1563121021.A.0F5.html
1F:推 t64141: 想法跟你很相近推 07/15 00:56
2F:推 anandydy529: 中肯 07/15 01:24
3F:推 sharku: 推 07/15 11:18
4F:推 slytb: 推 07/15 16:34
5F:推 landlord: 说得好 07/16 01:08