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

05 | 一个好的自动化测试长什么样?

你好,我是郑晔!
在上一讲里我们讲了测试的一个关键点是自动化测试,而自动化刚好是程序员的强项。自从有了自动化测试框架,自动化测试就从业余走向了专业,但这并不是说,有了测试框架你就能把测试写好了,我们来看几个典型的问题:
测试不够稳定,一次运行通过,下次就不能通过了;
要测的东西很简单,但是为了测这个东西,光是周边配套的准备就要写很多的代码;
一个测试必须在另一个测试之后运行;
……
这是让很多团队在测试中挣扎的原因,也是很多人放弃测试的理由。之所以测试会出现这样那样的问题,一个重要的原因是这些测试不够好。这一讲,我们就来讲讲好的测试应该长什么样。

测试的样子

关于自动化测试,其实有一个关键的问题我们一直还没有讨论。我们用测试来保证代码的正确性,然而,测试的正确性如何保证呢?
这是一个会问懵很多人的问题:测试保证代码的正确性,那测试代码的正确性也用测试保证?但你见过有人给测试写测试吗?没有。因为这是一个循环的问题,你给测试写了测试,那新的测试怎么保证正确性呢?难不成要递归地写下去?是不是有种大脑要堆栈溢出的感觉了。
既然给测试写测试不是一个行得通的做法,那唯一可行的方案就是,把测试写简单,简单到一目了然,不需要证明它的正确性。由此,我们可以知道,一个复杂的测试肯定不是一个好的测试。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

自动化测试在软件开发中扮演着重要的角色,然而,很多团队在测试中遇到了挑战。本文从测试的正确性出发,探讨了好的自动化测试应该具备的特点。作者指出,一个好的测试应该是简单明了的,不需要证明其正确性。文章给出了一个例子,将测试分为准备、执行、断言和清理四个阶段,强调了测试用例的简洁性和结构化。作者强调了测试中常见的问题,如缺乏断言和一个测试中包含多个执行目标,提出了相应的解决方案。总的来说,本文通过简单的例子和清晰的逻辑,向读者展示了一个好的自动化测试应该具备的特点,为读者提供了一种思考测试质量的新视角。 文章中提到了A-TRIP这一概念,即自动化、全面的、可重复的、独立的和专业的,作为衡量好的测试的标准。自动化测试的核心增强在于自动化,而测试应该尽可能全面覆盖各种场景,保证可重复性和独立性。此外,作者还强调了测试代码也是代码,需要按照代码的标准去维护,包括清晰的命名、函数的拆分、重构和抽象出测试的基础库等。测试的命名也应该能够清晰地描述测试用例的场景,以及在什么条件下应该出现什么效果。通过这些要点,读者可以了解到好的自动化测试应该具备的特点,以及如何衡量一个测试是否做好。

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

全部留言(13)

  • 最新
  • 精选
  • إ并向你招手إ祥子
    Junit5 的@DisplayName 注解,可以文档化测试的内容,用它说明测试的内容和条件可以让测试更友好一些

    作者回复: 多谢分享

    2021-08-14
    9
  • 北风一叶
    测试四步走:准备、执行、 断言、清理 测试五标准:自动化、全面的、可重复的、独立的、专业的 测试起名:应该怎么怎么样,应该怎么怎么样 当什么条件出现的时候

    作者回复: 这个总结很漂亮

    2021-08-25
    2
    7
  • 就叫Hugo也行
    测试的基本结构:我联想到戴明PDCA质量环

    作者回复: 这个联想很漂亮,是这么回事。

    2021-09-14
    4
  • sylan215
    郑老师对测试理解的很到位,提到的几个理念都非常的准确,而且还做了很精炼的总结,真给力。 1、每一条测试的测试目的必须非常准确,比如我之前推荐的测试用例写法就是「验证XXXX」,测试目的一目了然; 2、每一条测试的测试目的必须唯一,越简单越好,这对于测试执行和测试维护都大有裨益; 3、一般测试会包含 4 个阶段:准备、执行、断言、清理,这是从自动化测试的角度做的总结,也一样适用于手工测试; 4、一个好的自动化测试用例的 5 个特点:Automatic(自动化)、Thorough(全面的)、Repeatable(可重复的)、Independent(独立的)和 Professional(专业的); 5、重点说一下 Independent,每条测试用例之间,尽量降低耦合性,这样对于测试用例的理解和执行,都大有裨益; 以上,期待老师后续的精彩分享。

    作者回复: 很好的总结

    2021-08-18
    4
  • 大茄子实验室
    背景:从事数仓开发,没有对应的测试人员,也没有使用过测试框架。一般都是自己写测试脚本进行比对 测试后,清理会延迟做,因为一天的数据对,不代表每天的数据对,备份数据会保留一段时间。 问题: 1.命名比较随意。 2.测试有时候不是独立的 3.全面性比较难做到,第一,有可能是开发人员对所有的业务场景没有全面了解。 第二呢,是用户本身对业务场景没有做到全面了解

    作者回复: 多谢分享

    2021-08-16
    4
  • davix
    請問那種協議交互的場景:來回幾個消息的ㄧ系列過程,用什麼結構好?

    作者回复: 把业务和技术实现隔离开,单独测业务,再单独测通信。

    2021-08-13
    2
    4
  • aoe
    TestNG有提供按测试方法顺序执行的注解,开始觉得好厉害,后来发现这样依赖执行顺序的测试耦合性太强了,前面的测试没通过,后面的就无法执行了,现在的测试代码都是像老师说的这样可以独立运行,也回归到了JUnit5,TestNG文档还停留在2000年

    作者回复: TestNG 是 JUnit 没升级到 Java 5 语法之前的产物,后来,JUnit 5 升级了,TestNg 也没有太多本质性的创新,路就难走了。

    2021-11-09
    3
  • 邓志国
    我喜欢有时候用中文命名测试方法,感觉更容易阅读理解

    作者回复: 这取决于团队对于英文水平的要求

    2021-08-14
    2
  • 晴天了
    有个问题问下郑大 new a(new b(new c)) 背景逻辑: a类的aa方法, 调用外部依赖b类的bb方法, b类的bb方法, 调用外部依赖c类的cc方法. 问题: 当测试 a类的aa方法时, 应该mock b的bb方法, 还是mock c类的cc方法??

    作者回复: 最直截了当的就是Mock B的方法。

    2021-12-08
    1
  • Geek_3b1096
    周末来学习

    作者回复: 好样的

    2021-08-29
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部