程序员的测试课
郑晔
开源项目 Moco 作者
18911 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 23 讲
加餐 (1讲)
结束语 (1讲)
程序员的测试课
15
15
1.0x
00:00/00:00
登录|注册

08 | 单元测试应该怎么写?

你好,我是郑晔!
经过前面的介绍,我们已经对测试的基础有了理解,已经会用自动化测试框架来写测试了。对于那些不可控的组件,我们也可以用 Mock 框架将其替换掉,让测试环境变得可控。其实,我们在前面介绍的这些东西都是为了让我们能够更好地编写单元测试。
单元测试是所有测试类型中最基础的,它的优点是运行速度快,可以尽早地发现问题。只有通过单元测试保证了每个组件的正确性,我们才拥有了构建系统的一块块稳定的基石。
按道理来说,我们应该尽可能多地编写单元测试,这可以帮助我们提高代码质量以及更准确地定位问题。但在实际的工作中,真正大面积编写单元测试的团队却并不多。前面我们已经提到了一部分原因(比如设计没有做好),也有团队虽然写了单元测试,但单元测试没有很好地起到保护网的作用,反而是在代码调整过程中成了阻碍。
这一讲,我们就把前面学到的知识串联起来,谈谈如何做好单元测试。

单元测试什么时候写

你是怎么编写单元测试的呢?很多人的做法是先把所有的功能代码都写完,然后,再针对写好的代码一点一点地补写测试。
在这种编写测试的做法中,单元测试扮演着非常不受人待见的角色。你的整个功能代码都写完了,再去写测试就成了一件为了应付差事不得不做的事情。更关键的一点是,你编写的这些代码可能是你几天的工作量,你已经很难记得在编写这堆代码时所有的细节了,这个时候补写的测试对提升代码质量的帮助已经不是很大了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

单元测试是软件开发中至关重要的一环,本文深入介绍了如何编写高质量的单元测试。作者首先强调了单元测试的重要性,指出它能够快速发现问题并确保每个组件的正确性,是构建系统稳定基石的关键。文章提出了编写单元测试的最佳实践,建议在编写功能代码的同时,就要编写相应的测试,而不是等功能代码写完后再补充测试。此外,作者还强调了任务分解的重要性,指出只有将任务分解到微操作的粒度,才能够写好代码和测试。文章详细介绍了编写单元测试的过程,包括确定验收标准、设计待测单元的行为、设计测试用例、实例化测试场景等步骤。最后,作者提到了测试接口与实现的区别,强调了尽可能减少对于实现细节的约束。总的来说,本文通过介绍单元测试的最佳实践和编写过程,为读者提供了全面的指导,帮助他们更好地理解和应用单元测试。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员的测试课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • sylan215
    1、单元测试可以帮助尽早发现问题,尽量多的单元测试也有助于提升代码质量以及更准确的定位问题; 2、单元测试尽量和编码的时候一起写,如果等代码实现完了,会因为要写的测试太多,而产生畏惧,容易放弃; 3、要写好单元测试,还要善于任务分解,所谓的单元,就是任务的某个部分,好的任务拆解,是编码和测试成功的不二法门; 4、每完成一个子任务,都可以把所有测试快速的跑一遍,避免前后的逻辑影响,如果测试通过,就可以进行代码提交,这可以算一个里程碑; 5、最好是先写测试用例,再进行编码,这里的测试用例不一定是测试同学那种专业的用例,而是我们需要覆盖的逻辑场景(也可以找测试协助提供用例); 6、优先测试接口,再根据时间情况看是否要验证实现,因为实现可能会因为逻辑变更而失效(维护成本变大); 以上,期待后续的精彩内容。

    作者回复: 总结得很好

    2021-09-01
    8
  • X
    请问老师,如果 接口行为Mock,入参设置宽泛一些(any),那这样入参感觉没有测试到,细节上会不会有啥问题? 现在测试都是严格限制出入参。。

    作者回复: 这取决于你要测的是什么,我在专栏里建议的是测试接口,在这种情况下,Mock 的入参就不是关键点,为啥要限制那么严格呢?如果限制严格了,就是在做细节的测试。

    2021-08-23
    2
    5
  • 大师兄
    修改代码的艺术,翻了几遍,学习到一些技巧,调整了遗留程序的设计。个人上有一些成长,想在团队内推广单元测试,发起了几次单元测试的分享与实战入门。发现没落地成覆盖率,或者强流程,小伙伴都是跳过。

    作者回复: 给你个建议,从持续集成入手,我在《10x程序员工作法》中讲过。

    2021-09-24
    2
    2
  • Geek_3b1096
    粒度要小到可以在很短时间内完成 <- 难,学习学习!

    作者回复: 确实难,需要练,练好了才和别人拉开差距的。

    2021-09-08
    2
  • 大碗
    请问老师这个addItem的verify可以去掉么,不写测试覆盖度不会下降

    作者回复: 不会,verify是一种断言,不会影响覆盖率。

    2021-08-20
    2
  • 尔冬橙
    私有函数如何测试呢

    作者回复: 这是一个伪命题,把代码抽出来,成为另外一个类,它就变成了公有的。在我的几个专栏里,我一直在说,代码大就是问题。

    2022-03-14
  • Gojustforfun
    有时候写完单元测试,对于关键的“单元”可能还需要看看其运行时间以及内存分配情况(基准/性能测试)。请问老师,程序员是否要进行性能测试?如何进行性能测试?可否加餐一篇聊聊?谢谢
    2021-08-20
    4
  • aoe
    原来写单元测试非常吃力是因为代码写完了最后才加测试代码!和函数一起写测试就简单多了,还可以从设计时就支持测试!
    2021-11-11
    2
  • ifelse
    做好任务分解,写好单元测试。--记下来
    2022-06-09
    1
  • 当初莫相识
    老师,关于gui程序应该如何写单元测试呢,比如qt写出的程序,我通常是运行可执行程序,看ui响应以及相关逻辑是否达到预期。还请老师指点迷津!
    2022-04-23
    1
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部