我熟悉这些概念(参加大学的测试课程),但我不知道如何真正使用它们,因为我从未参与过“真正的”TDD项目。
我即将开始使用Ruby on Rails开发项目(最有可能使用2.3)。此应用程序将用于管理数据,用户和一些文件。一开始不会太复杂,但在接下来的6个月内可能会扩展很多,所以我觉得现在是进入TDD的最佳时机。
我对如何做到有一个基本的想法,但我仍然需要一些指示和建议:
什么是Ruby on Rails TDD 101文章 我应该读一下吗?
我需要测试什么?
我应该使用哪种gem /插件?
我应该使用rspec吗?还有别的吗?
一旦我完成了所有测试课程,我该如何进行部署? (例如:持续整合)
TDD到底耗费多少时间?
我是否需要阅读一本关于此的书,或者我可以通过玩它和阅读在线教程来获得所有内容吗?如果我需要读一本书,那本书是什么?
我喜欢用例子学习,所以有人可以告诉我如何采用TDD方法来解决这个问题:
我有公司。我有联系人。一个 联系人可以链接到1家公司。一个 公司可以有多个联系人。一世 想要创造创造方式 联系人,公司和链接联系人 对公司。
您不必在答案中使用此示例,但这会有所帮助:)
答案 0 :(得分:201)
我应该阅读什么Ruby on Rails TDD 101文章?
我将从a guide to testing rails applications开始。
同样Railscast有一些关于如何使用不同测试工具的优秀截屏视频。
我需要测试什么?
我将从模型开始,因为它们很容易测试。简单的规则是您需要覆盖测试中的每个if语句。
您应该测试方法的目的(以确保它按预期运行)以及所有边缘情况。
另外,请确保不要过度测试。
我应该使用哪种gem /插件?我应该使用rspec吗?还有别的吗?
当你开始时,只需使用Test Unit
。熟悉基础知识后,您可以使用rspec
或cucumber
。
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)
答案 4 :(得分:5)
TDD首先是编写测试。这基本上迫使您在编写应用程序代码之前编写自己的客户端。这个循环通常是为不存在的API编写测试,运行测试期望它失败,编写API代码,再次运行测试并确保它通过。然后编写下一个测试...依此类推。
您可能也对此Rails guide感兴趣。
答案 5 :(得分:5)
我用:
答案 6 :(得分:3)
我应该使用哪种gem /插件?
我一直很喜欢shoulda。
TDD到底耗费多少时间?
我一直支持TDD开发的原因在于它着重于我将如何实现特定的代码。我有一种轶事感觉,每当我更加坚持TDD原则时,我花费的时间就会减少。花费的时间就是你编写单元测试的能力。如果单元测试没有捕获预期的行为,那么花在它们上的所有时间都会被浪费。