为什么我应该练习测试驱动开发,我应该如何开始?

很多人在开始编写代码之前都会谈论编写测试代码。这种做法通常称为测试驱动开发或TDD。通过这种方式编写软件我可以获得哪些好处?我如何开始这种做法?

0
我在这里迟到了,但我想把我的字节。练习TDD的最佳方法是使用Katas。这里有很好的测试卡塔: github.com/garora/TDD-Katas
额外 作者 Gaurav Aroraa,
请查看我对已经问过的同一问题的回答。 这个问题的详细解答</一>
额外 作者 eroijen,

6 答案

有很多好处:

  • 您可以立即获得有关您的代码是否正常工作的反馈,以便更快地找到错误
  • 通过看到测试从红色变为绿色,您知道您有一个工作回归测试和工作代码
  • 您可以重构现有代码,这意味着您可以清理代码而不必担心会破坏哪些代码
  • 最后,您可以在自动构建过程中运行一系列回归测试,从而让您更加确信您的代码库是可靠的

最好的开始就是开始。有关测试驱动开发的详尽 Kent Beck的书。只需从新代码开始,不必担心旧代码......只要您觉得需要重构某些代码,为现有功能编写测试,然后重构它,并确保测试保持绿色。另外,请阅读这篇精彩的文章

0
额外
到最后一篇文章(单元测试技巧)的链接已过期。以下是新文章的链接: devver.wordpress。 COM / 2008/07/07 /提示换单元测试
额外 作者 Igor Popov,

优点</强>

  1. 您了解如何划分代码
  2. 你确切地知道你想要你的代码做什么
  3. 你知道它应该如何行动,并且,如果重构破坏了任何东西
  4. 让您习惯于确保您的代码始终知道它应该做什么

入门

去做就对了。为你想做的事写一个测试用例,然后编写应该通过测试的代码。如果你通过测试,那么很好,你可以继续写代码总是失败的例子(例如2 + 2不应该等于5)。

一旦你所有的测试都通过了,写下你的实际业务逻辑来做你想做的事情。

如果您从头开始,请确保找到一个易于使用的好测试套件。我喜欢PHP,所以PHPUnit或SimpleTest运行良好。几乎所有流行的语言都有一些xUnit测试套件可用于帮助构建和自动化测试。

0
额外
顺便说一下,“将代码分区”可以让您免费获得一个非常好的架构。当你分解代码来测试它时,你会得到更好的体系结构。如果你有一些软件架构师的经验,这是非常自由的。
额外 作者 daitangio,

好处部分有最近被覆盖,至于从哪里开始...在小企业系统上那里没有太多未知数,所以风险很低。如果您还不知道测试框架(如NUnit),请先学习一下。否则,从编写你的第一个测试开始:)

0
额外
链接被破坏!
额外 作者 Nagaraj Tantri,

在我看来,最伟大的事情是,它显然允许你看看你的代码是否按照它应该做的。这可能看起来很明显,但如我以前发现的那样,迷失最初的目标是非常容易的:p

0
额外

Good starter: Getting Started with Tdd in Java using Eclipse by Brett L. Schuchert

是一组关于Java和C#中的TDD的截屏视频。它从TDD的草稿和教学基础开始。

0
额外

您可能在敏捷或瀑布环境中工作。也许你有明确的程序,经过多年努力,经过了战斗测试,或者你刚开始创业。不管情况如何,你可能至少要面对一次,即使不是更多,以下的痛苦,问题或导致交付不成功的原因:

  • 在创建要求,规范或用户故事期间,您的团队的一部分不在循环中
  • 大部分(如果不是全部)测试都是手动的,或者根本没有测试
  • 即使您进行了自动化测试,但它们并未发现真正的问题
  • 当他们为项目提供实际价值为时已晚时,自动化测试将被编写并执行
  • 总是比专门测试时间更紧迫
  • 团队分布在测试,开发和功能分析部门之间,他们经常不同步
  • 由于担心会破坏某些内容,因此无法重构代码
  • 维护成本太高
  • 上市时间太长
  • 客户不认为所发送的内容是他们要求的内容
  • 文档永远不会更新
  • 由于结果未知,您很难部署到生产环境中
  • 由于回归测试运行时间过长,您通常无法部署到生产环境中
  • 团队花费太多时间试图找出某些方法或类所具有的功能

测试驱动开发不会奇迹般地解决所有这些问题。相反,它使我们走上了寻求解决方案的道路。没有银弹,但是如果有一种开发实践可以在如此多的层面上发挥作用,那么这种实践就是TDD。测试驱动的开发加快了上市时间,使得重构更容易,有助于创建更好的设计,并促进更宽松的耦合。在直接利益的顶端,TDD是许多其他实践的先决条件(连续交付是其中之一)。更好的设计,精心编写的代码,更快的上市时间,最新的文档和可靠的测试覆盖率,是您通过应用TDD可以实现的一些结果。

0
额外