2009-06-04 56 views
7

测试驱动开发的标准过程似乎是添加一个测试,看它失败,编写产品代码,查看测试通过,重构,并将其全部检入源代码控制。版本控制和测试驱动开发

是否有任何内容允许您检出测试代码的修订版x和生产代码的修订版x-1,并确定您在修订版x中编写的测试失败? (我会对任何语言和源代码管理系统感兴趣,但我使用ruby和git)

有些情况下,您可能会添加已通过的测试,但它们会比开发更加验证。

+0

我不认为有人会禁止你做任何事情,它只是方法论。我会说大多数情况下它是非常非正式的,即使你定义了流程开发者会按顺序运行测试(我们希望确保我们的代码能够正常工作)。 – stefanB 2009-06-04 00:48:43

回答

1

几件事情:

  1. 重构试验后,再次运行测试
  2. 然后,重构代码,然后再次运行测试
  3. 然后,你不必检查在马上,但你能

在TDD中,存在补充说,通过测试没有意义。这是浪费时间。为了增加代码覆盖率,我一直在试图这样做,但是代码应该已经被实际上首先失败的测试所覆盖。

如果测试不首先失败,那么您不知道您添加的代码是否修复了问题,而且您不知道测试是否真的测试了任何内容。它不再是测试 - 它只是一些代码,可能会或可能不测试什么。

+0

关于1,你什么时候重构测试?在编写产品代码之前还是之后?如果事后,你是否打破生产守则以确保测试仍然有效? 为什么我倾向于尽早办理登机手续的一个原因是尽可能使提交尽可能的简单和小巧。 你用未经测试的代码采取什么方法?等到有错误报告出现?我正在尝试的一种方法是看看新的单元测试是否会使系统在突变测试中做得更好。 – 2009-06-04 00:57:43

0

如果您将生产和测试代码保存在不同的版本区域(例如单独的项目/源代码树/库/等)中,大多数版本控制系统允许您检出以前版本的代码并重建它们。就你而言,你可以签出生产代码的x-1版本,重新构建它,然后针对新建/部署的生产可部署运行测试代码。

有一件事可能会有所帮助,那就是在发布时标记/标记所有代码,以便您可以轻松获取代码以前版本的整个源代码树。

0

有什么事情让你 退房修订x的测试代码, 和修订X-1的生产 代码,并看到你 写在改版X测试失败?

我认为你正在寻找关键字持续集成。在版本控制系统中有许多工具实际上被实现为post-commit挂钩(也就是每次提交后在服务器/中央存储库上运行的东西):例如,他们将在每次提交后运行单元测试,并通过电子邮件发送提交者if修订引入了回归。

这样的工具是完全能够检测哪些测试,从来没有从用于传递测试通过,目前最近提交,这意味着使用TDD和持续集成完全就是失败的原因很好:你可能可以配置你的工具,当引入一个新的失败测试时不要尖叫,并且只能在回归时投诉。

与往常一样,我会领你到维基百科的generic introduction on the topic。更详细的,相当有名的资源将是文章从Martin Fowler

1

只需保持您的测试和代码在单独的目录,然后您可以签出一个版本的测试和另一个代码。

话虽这么说,在多开发环境中,你通常不希望在代码检查在测试失败。

我也质疑这样做的动机是什么?如果首先“执行”失败的测试,那么我会指出你来自TDD(推广)的父亲this comment

1

“在某些情况下,您可能添加已经通过测试,但他们会比发展更验证。”

在TDD中,你总是注意一个测试失败,然后让它通过,以便你知道它的工作原理。

正如您看到的,有时你想明确地描述由代码覆盖您已经编写但是从被测类之外认为当是类的一个单独的功能特性。在那种情况下,测试会通过。

但是,仍然看着测试失败。

要么写有明显的失败断言测试,然后修复断言,使其通过。或者,暂时中断代码并观察所有受影响的测试失败,包括新测试。然后修复代码以使其重新工作。

0

如果您在编写失败的测试之后再测试,然后再次传递时,您应该在以后能够在测试失败的位置创建分支。

然后,您可以添加更多的测试,验证他们也失败了,git commitgit merge,然后运行当前的代码基础的测试,看看你已经做的工作​​会导致测试通过,或者如果您现在需要做更多的工作。