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

时间:2009-09-06 19:58:33

标签: ruby-on-rails testing tdd

我熟悉这些概念(参加大学的测试课程),但我不知道如何真正使用它们,因为我从未参与过“真正的”TDD项目。

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

我对如何做到有一个基本的想法,但我仍然需要一些指示和建议:

  • 什么是Ruby on Rails TDD 101文章 我应该读一下吗?

  • 我需要测试什么?

  • 我应该使用哪种gem /插件?

  • 我应该使用rspec吗?还有别的吗?

  • 一旦我完成了所有测试课程,我该如何进行部署? (例如:持续整合)

  • TDD到底耗费多少时间?

  • 我是否需要阅读一本关于此的书,或者我可以通过玩它和阅读在线教程来获得所有内容吗?如果我需要读一本书,那本书是什么?


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

  

我有公司。我有联系人。一个   联系人可以链接到1家公司。一个   公司可以有多个联系人。一世   想要创造创造方式   联系人,公司和链接联系人   对公司。

您不必在答案中使用此示例,但这会有所帮助:)

7 个答案:

答案 0 :(得分:201)

  

我应该阅读什么Ruby on Rails TDD 101文章?

我将从a guide to testing rails applications开始。

同样Railscast有一些关于如何使用不同测试工具的优秀截屏视频。

  

我需要测试什么?

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

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

另外,请确保不要过度测试。

  

我应该使用哪种gem /插件?我应该使用rspec吗?还有别的吗?

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

Autotest是一个很好的工具,如果你想真正的测试驱动。但这不是必需的“好事”。

  

一旦我获得了所有测试课程,我该如何部署它们?

不确定这个问题。您通常不会部署测试。完成所有测试类后,输入“rake test”即可运行所有测试。

  

TDD到底耗费多少时间?

它确实节省了时间。如果你喜欢迷宫拼图,你知道如果你从完成开始,它几乎总是更容易解决。与TDD相同。没有测试驱动,你一直在想'我下一步该做什么'。使用Test Driven,测试将告诉您下一步该做什么(如果逻辑不存在则会中断,因此您只需要修复损坏的部分)。此外,您可以减少错误,从长远来看,这将为您节省大量时间。

  

我是否需要阅读有关此内容的书籍   我可以通过比赛获得一切   围绕它和在线阅读   教程?如果我需要读一本书,   什么书?

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

在您的示例中,需要测试的内容包括:联系人可以链接到1家公司,公司可以拥有多个联系人,创建创建联系人的方式以及将联系人链接到公司。

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

答案 1 :(得分:13)

我制作了一个6集的视频系列,于2010年夏天在旧金山作为公共课程教授。该材料涵盖了使用RSpec 1.3在Rails 2.3中的测试和开发人员效率。稍微过时,但主要概念适用于Rails 3和Rspec 2.x

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

答案 2 :(得分:9)

我推荐这本书:Ruby on Rails Tutorial。我差不多完成了它。本书使用TDD 整个一书。试一试!

答案 3 :(得分:8)

我推荐这本书:Agile Web Development with Rails

答案 4 :(得分:5)

TDD首先是编写测试。这基本上迫使您在编写应用程序代码之前编写自己的客户端。这个循环通常是为不存在的API编写测试,运行测试期望它失败,编写API代码,再次运行测试并确保它通过。然后编写下一个测试...依此类推。

您可能也对此Rails guide感兴趣。

答案 5 :(得分:5)

我用:

  1. Shoulda和rspec进行测试
  2. 模仿的摩卡
  3. 工厂
  4. Factory_girl
  5. parallel_specs用于加快测试速度
  6. metric_fu进行代码分析

答案 6 :(得分:3)

  

我应该使用哪种gem /插件?

我一直很喜欢shoulda

  

TDD到底耗费多少时间?

我一直支持TDD开发的原因在于它着重于我将如何实现特定的代码。我有一种轶事感觉,每当我更加坚持TDD原则时,我花费的时间就会减少。花费的时间就是你编写单元测试的能力。如果单元测试没有捕获预期的行为,那么花在它们上的所有时间都会被浪费。