如何开始使用Ruby on Rails的TDD?

我对这些概念很熟悉(在大学里参加过testing课),但是我不确定如何真正使用它们,因为我从来没有从事过“真正的”TDD项目。

我即将开始使用Ruby on Rails开发项目(很可能使用2.3)。 这个应用程序将用于pipe理数据,用户和一些文件。 开始时不会太复杂,但在未来6个月内可能会有很大的扩展,所以我觉得现在是进入TDD的时候了。

我已经有了一个基本的想法,但是我仍然需要一些指导和build议:

  • 我应该阅读哪些Ruby on Rails TDD 101文章?

  • 我需要testing什么?

  • 我应该使用什么gem/插件?

  • 我应该使用rspec ? 别的东西?

  • 一旦我有了所有的testing课程,我该如何去部署它们? (如:持续整合)

  • TDD真的是如此耗时?

  • 我需要阅读一本关于这个的书吗?或者我可以通过玩弄它并阅读在线教程来获得一切吗? 如果我需要读一本书,什么书?


我喜欢学习示例,所以有人可以告诉我如何去采取TDD方法来解决这个问题:

我有公司。 我有联系人。 联系人可以链接到1个公司。 一个公司可以有多个联系人。 我想创build方法来创build联系人,公司和链接到公司。

你不必在你的答案中使用这个例子,但它会帮助:)

我应该阅读哪些Ruby on Rails TDD 101文章?

我将从一个testingrails应用程序的指南开始。

Railscast还有一些关于如何使用不同testing工具的优秀截屏。

我需要testing什么?

我将从模型开始,因为它们很容易testing。 简单的规则是你需要覆盖你的testing中的每个if语句。

您应该testing方法的目的(以确保它按预期运行)以及所有边缘情况。

还要确保你不会结束testing。

我应该使用什么gem/插件? 我应该使用rspec? 别的东西?

当你开始时,只需使用Test Unit 。 熟悉基础知识后,可以使用rspeccucumber

如果你想成为真正的testing驱动, Autotest是一个很好的工具。 但是这不是必须的。

一旦我完成了所有的testing课程,我该如何去部署它们?

不确定这个问题。 你通常不会部署testing。 一旦你有所有的testing类简单的types“耙testing”来运行所有的testing。

TDD真的是如此耗时?

这确实节省了时间。 如果你喜欢迷宫迷宫,你知道如果你从头到尾都解决它,那么解决它几乎总是比较容易。 和TDD一样。 没有testing驱动,你一直在想'下一步该怎么做'。 随着testing驱动,testing会告诉你下一步该做什么(如果逻辑不在那里,就会中断,所以你只需要修复损坏的部分)。 同时你也有较less的错误,从长远来看可以为你节省很多时间。

我需要阅读一本关于这个的书吗?或者我可以通过玩弄它并阅读在线教程来获得一切吗? 如果我需要读一本书,什么书?

你不需要一本书。 学习任何东西最有效的方法是:只要做到这一点。 一旦遇到问题或问题,请返回本书或在线资源。 这也是敏捷的。

在你的例子中,需要testing的事情是:一个联系人可以链接到一个公司,一个公司可以有多个联系人,创build联系人的方式,并联系到公司。

 class CompanyTest <Test::Unit def test_relationship # test associations/relationships c = companies(:some_company) assert_equal [a list of contacts], c.contacts # make sure a company can have multiple contacts end end class ContactTest<Test::Unit def test_relationships c = contact(:some_contact) assert_equal some_company, c.company # make sure the contact link to 1 company end def test_create/add # test create contacts, here you need to make sure the contact is created correctly, and linked to company correctly end end 

我制作了一个6集的video系列,在2010年夏天在旧金山作为公开课进行讲授。该材料涵盖了使用RSpec 1.3的Rails 2.3中的testing和开发人员效率。 有点过时,但主要概念适用于Rspec 2.x的Rails 3

http://www.rubyfocus.biz/class_video/2010/07/19/rails_tdd_class_1.html

我推荐这本书: Ruby on Rails教程 。 我差不多完成了。 本书采用TDD全书。 试一试!

我推荐这本书: 使用Rails进行敏捷Web开发

TDD是关于首先编写testing的。 这基本上迫使你编写自己的客户端,然后再编写应用程序代码。 循环通常是编写一个不存在的API的testing,运行testing期望它失败,去写你的API代码,再次运行你的testing,并确保它通过。 然后写下你的下一个testing…等等。

您可能也对这个Rails指南感兴趣。

我用 :

  1. 应该和rspec进行testing
  2. 摩卡嘲笑
  3. 工厂的Factory_girl
  4. parallel_specs用于更快的testing
  5. metric_fu用于代码分析

我应该使用什么gem/插件?

我一直享有应该 。

TDD真的是如此耗时?

我一直赞成TDD开发的原因是它关注如何实现特定的代码。 我有一个轶事的感觉,就是每当我更加坚持TDD原则时,我就会花更less的时间来重新工作。 花费的时间是在你写unit testing的时候。 如果unit testing没有捕获到预期的行为,那么所有花费在这些行为上的时间都浪费了。