如何使用Ruby on Rails开始使用TDD?[关闭]


167

我对这些概念很熟悉(在大学里上过测试班),但是我不确定如何真正使用它们,因为我从未从事过“真正的” TDD项目。

我即将开始使用Ruby on Rails(最有可能使用2.3)开发项目。该应用程序将用于管理数据,用户和某些文件。起初并不会太复杂,但是在接下来的6个月中可能会扩展很多,所以我认为现在是时候进一步了解TDD了。

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

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

  • 我需要测试什么?

  • 我应该使用什么gem / plugin?

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

  • 掌握所有测试课程后,如何去部署它们?(例如:持续集成)

  • TDD到底是多么耗时?

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


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

我有公司。我有联络人。一个联系人可以链接到1个公司。一个公司可以有多个联系人。我想创建创建联系人,公司并将联系人链接到公司的方法。

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

Answers:


202

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

我将从测试Rails应用程序的指南开始。

此外,Railscast还提供了一些有关如何使用不同测试工具的出色屏幕录像。

我需要测试什么?

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

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

另外,请确保您不会结束测试。

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

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

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

完成所有测试课程后,如何去部署它们?

不确定这个问题。您通常不部署测试。拥有所有测试类别后,只需键入“ rake test”即可运行所有测试。

TDD到底是多么耗时?

确实节省了时间。如果您喜欢迷宫拼图,那么从头到尾,解决难题几乎总是比较容易的。与TDD相同。如果没有“测试驱动”,您将一直在思考“下一步我该怎么办”。使用“测试驱动”,测试将告诉您下一步该做什么(如果逻辑不存在,它将中断,因此您只需要修复损坏的部分)。而且,您的bug更少,从长远来看可以节省大量时间。

我需要阅读一本与此有关的书吗?还是可以通过玩转它并阅读在线教程来获得所有内容?如果我需要读书,那是什么书?

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

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

3
该文章的链接已损坏,但在此处找到了它:web.archive.org/web/20100325215651/http
//bloritsch.d-haven.net/…– Fivetwentysix 2011年




5

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

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



3

我应该使用什么gem / plugin?

我一直很喜欢shoda

TDD到底是多么耗时?

我一直喜欢TDD开发的原因是它着重于我将如何实现特定代码段。我有一个轶事感,就是每当我更加坚决地遵循TDD原则时,我以后花费的时间就会更少。花费的时间全部取决于编写单元测试的程度。如果单元测试没有捕获预期的行为,那么所有花费在测试上的时间都将被浪费。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.