跳转到主要内容
Chinese, Simplified

测试驱动开发是一种编程方法,其中在编码之前创建测试。 下面,我列出了使其应用程序有用的一些原因。

  • 1.测试可以作为代码的蓝图:在建造房屋之前,制定蓝图来帮助房屋建造者。 构建测试可帮助您了解应用程序的工作原理。 此外,它可以帮助您创建更优化的代码。
  • 2.帮助开发者了解客户需求
  • 3. 可维护的代码,有利于团队合作,帮助未来的开发者。
  • 4. 预防性,不仅仅是纠正性:构建测试可以让开发人员更加意识到可能发生的错误和边缘情况。

TDD 的三个阶段

testing

 

TDD 的三个核心步骤:创建测试——实现代码——重构


1. 创建测试


此阶段将在提交消息中以“[RED]”开头。测试脚本需要精确但简单且可重用。例如,当您有一个按钮时,您可以检查它们在被单击后是否重定向到正确的路径。如果稍后您添加另一个,您可以重复使用它们。从这一步开始,您决定要实现的特定功能。使其具体而小。
然后,想象一下这个功能是如何工作的,可能的边缘情况是什么,将使用哪些组件,以及在制作测试脚本时它们将如何相互交互。您不必首先实现全部功能。测试一个小功能——实现——并迭代。


2. 实施代码


此阶段将在提交消息中以“[GREEN]”开头。对你来说可能是最令人兴奋的部分😜。开发人员将根据书面场景对功能进行编码。目的是从测试中消除当前的错误。

testing

3.重构


此阶段将在提交消息中以“[REFACTOR]”开头。 在这个阶段,开发人员通过删除冗余而不改变程序的行为来优化他们的代码。


功能测试的类型

testing

  • 单元测试:检查最小的单元,如函数或方法,以使其正常工作。 自动化便宜。
  • 集成测试:检查所有使用的模块是否可以很好地协同工作。 示例:对数据库的 API 调用。
  • 验收测试:在发布前测试端到端产品。

..还有很多。 那么,您是否仍然怀疑最初的努力是否值得花时间? 事实上,测试并不是一个简单的概念。 你需要大量的练习才能获得最大的好处。 由于 TDD 起初可能看起来令人生畏,因此以下心态可以帮助您开始。

  • 从一个小功能开始。
  • 如果您从事单个项目,请对功能的流程充满想象力。 如果您与 PM 和其他用户一起工作,请有效地验证产品规格。

在行业中,测试的角色可以分配给软件工程师、QA 工程师或 SDET(测试中的软件开发人员)。 这取决于公司的政策。


我如何在我的项目中实现 TDD

testing

 

testing

上面是一个用 Jest 编写的典型前端单元测试的例子。 我创建了一个测试来检查操作员注册页面是否正确呈现(第 52-65 行)。 语法如下,


expect(/*get the component/).TestingFunction()


— 断言测试是否按照我们想要的方式运行。


A. 红色的


使用旧的提交消息约定,我首先为即将推出的功能创建了失败测试。 下面,我创建了两个测试来检查 1) 运营商注册页面是否正确呈现,以及 2) 当正确的用户通过身份验证时,运营商主页是否会正确呈现。 管道将失败,因为我还没有实现该功能。

b. 绿色


然后,我根据之前创建的测试实现了该功能。 下面是实现运营商注册页面的代码片段。 我只添加了一条新路由并将角色添加为组件的新参数,因此注册页面也相应呈现。

 

C. 重构


在重构阶段,我通过删除冗余代码块来修复我的代码。

testing

实现功能后,您应该检查测试覆盖率。 测试覆盖率是一种衡量我们的应用程序代码有多少部分被测试的技术。 数字越高,测试的案例和功能就越多。 因此,100% 是一个完美的分数。

testing

运行 npm test (执行 react-scripts test )后,会给出如上的报告。 如何解释报告的数字如下:

  • 语句:程序中的每条语句都执行了吗?
  • 分支:在 if/else 等条件语句中,会创建场景分支。 那么,程序中的每个分支都经过测试了吗?
  • Funcs:程序中的每个函数都被调用了吗?
  • 行数:测试了多少行代码?

testing

上面的错误说明给定的两个数之和应该是8,但收到的是7。这种错误是我们将反复看到的,以检查我们的功能实现是否正确。


我的想法


TDD 是一种应用于大多数公司的实践,已经显示出一些长期的好处。学习编码不是一次性的活动,您还需要维护它。让您(和其他人)轻松维护代码的一种方法是使用 TDD。


优势 - TDD 如何提高我们的团队绩效

 

  • 更简单的代码。由于我们需要先创建测试,所以我们不能随意编写实现代码。开发人员在创建良好的功能流方面变得更加周到,因为测试也可以作为蓝图。
  • 可维护。如果我们在 backlog 上有另一个特性,我们首先创建测试。代码库变得更加模块化和干净。它可以节省我们调试的时间。
  • 测试也可以作为文档。它们帮助我们的团队更好地理解彼此的代码,因为测试具有该功能如何工作的有序场景。


缺点

 

  • 较慢的过程。开发可能会更慢,因为我们需要先进行测试,但它会以更少的调试时间进行权衡。
  • 不是 100% 保证的。尤其是覆盖率不高的时候。有时,他们不知道错误的确切位置。


来源

原文:https://fathinah.medium.com/tdd-a-savior-or-nightmare-bfcf42a6ac55

本文:https://jiagoushi.pro/node/1881

Article
知识星球
 
微信公众号
 
视频号