【问题标题】:How to get started on TDD with Ruby on Rails? [closed]如何使用 Ruby on Rails 开始 TDD? [关闭]
【发布时间】:2009-09-06 19:58:32
【问题描述】:

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

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

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

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

  • 我需要测试什么?

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

  • 我应该使用rspec吗?还有什么?

  • 完成所有测试类后,如何部署它们? (例如:持续集成)

  • TDD 到底有多耗时?

  • 我是否需要阅读有关这方面的书,或者我可以通过玩弄它并阅读在线教程来获得所有内容吗?如果我需要看书,读什么书?


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

我有公司。我有通讯录。一个 联系人可以链接到 1 个公司。一个 公司可以有多个联系人。我 想创造创造的方式 联系人、公司和链接联系人 给公司。

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

【问题讨论】:

    标签: ruby-on-rails testing tdd


    【解决方案1】:

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

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

    另外Railscast 有一些关于如何使用不同测试工具的精彩截屏视频。

    我需要测试什么?

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

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

    还要确保您不会过度测试。

    我应该使用什么 gem/插件?我应该使用 rspec 吗?还有什么?

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

    Autotest 是一个很好的工具,如果您想真正进行测试驱动。但它不是必需的。

    一旦我完成了所有的测试类,我该如何去部署它们?

    不确定这个问题。您通常不会部署测试。一旦你有了所有的测试类,简单的输入“rake test”来运行你的所有测试。

    TDD 到底有多耗时?

    真的很节省时间。如果你喜欢迷宫拼图,你知道从头到尾解决它几乎总是更容易。与 TDD 相同。如果没有测试驱动,您会一直在思考“我接下来应该做什么”。使用测试驱动,测试会告诉你接下来要做什么(如果逻辑不存在,它会中断,所以你只需要修复损坏的部分)。此外,您的错误更少,从长远来看,这将为您节省大量时间。

    我是否需要阅读有关这方面的书或 我可以通过玩得到一切吗 随身携带并在线阅读 教程?如果我需要看书, 什么书?

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

    在您的示例中,需要测试的内容是:一个联系人可以链接到 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
    

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我推荐这本书:Ruby on Rails Tutorial。我几乎完成了它。这本书使用TDD 整本书。试试看!

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            我用:

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

            【讨论】:

              【解决方案7】:

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

              我一直很喜欢shoulda

              TDD 到底有多耗时?

              我一直偏爱 TDD 开发的原因是它专注于我将如何实现一段特定的代码。我有一种轶事感觉,每当我更坚定地坚持 TDD 原则时,我以后返工的时间就会减少。不过,所花费的时间都在于您编写单元测试的能力。如果单元测试没有捕捉到预期的行为,那么花费在它们上的所有时间都是浪费的。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-07-23
                • 2015-07-21
                • 2019-07-26
                相关资源
                最近更新 更多