Ruby on rails 有效的TDD战略的所有要素是什么?

Ruby on rails 有效的TDD战略的所有要素是什么?,ruby-on-rails,rspec,tdd,capybara,Ruby On Rails,Rspec,Tdd,Capybara,我对学习如何使用TDD正确开发软件感到非常失望。似乎每个人做这件事的方式和顺序都不一样。在这一点上,我只想知道所有的考虑因素是什么?这就是我想到的:我应该使用rspec和水豚。话虽如此,我需要编写哪些不同类型的测试,才能构建一个经过良好测试的应用程序。我正在寻找一个列表,其中包括我的应用程序正在测试的区域、测试它所需的框架以及任何依赖项 例如,人们似乎建议从单元测试模型开始,但当我观看TDD教程时,他们似乎只编写集成测试。我遗漏了什么吗?使用TDD进行实际应用程序的端到端开发确实是一项文档不足的

我对学习如何使用TDD正确开发软件感到非常失望。似乎每个人做这件事的方式和顺序都不一样。在这一点上,我只想知道所有的考虑因素是什么?这就是我想到的:我应该使用rspec和水豚。话虽如此,我需要编写哪些不同类型的测试,才能构建一个经过良好测试的应用程序。我正在寻找一个列表,其中包括我的应用程序正在测试的区域、测试它所需的框架以及任何依赖项


例如,人们似乎建议从单元测试模型开始,但当我观看TDD教程时,他们似乎只编写集成测试。我遗漏了什么吗?

使用TDD进行实际应用程序的端到端开发确实是一项文档不足的活动。的确,你会在那里找到教科书上的例子、katas和理论文章。然而,有几本书对TDD采取了更全面、更实用的方法——例如(强烈推荐),在较小程度上,还有贝克的,尽管它们没有专门针对RoR

GOOS中描述的方法从编写端到端验收测试(集成测试,在您的案例中可能相当于RSpec测试)开始,但在该循环中,您可以编写设计较低级别对象所需的尽可能多的TDD单元测试。在编写这些代码时,您基本上可以从您想要的地方开始—从外层、内层或应用程序中对您最方便的部分开始。只要你模拟掉任何依赖性,它们仍然是单元测试。

好吧,主题“how do you TDD”与主题“how do you Right test?”一样公开。在Ruby中,更具体地说,在Rails中,rspec应该是开始使用的工具,而不是结束使用的工具。RSpec允许您为组件编写单元测试,以单独测试它们。在Rails上下文中,这意味着:

  • 测试你的模型
  • 测试你的控制器
  • 测试你的观点
  • 测试你的助手
  • 测试你的路线
这是一个非常好的工具,不完全是rails绑定的,它还用于测试其他框架

完成RSpec后,你应该跳到cucumber。黄瓜(http://cukes.info/)是编写集成测试最常用的工具(同样,对于Rails环境)。然后你可以把水豚放在黄瓜上

完成cucumber之后,您将完成对应用程序后端及其HTML输出(部分)的测试。这时您还应该测试javascript代码。怎么做?首先,您必须对其进行单元测试。茉莉花(http://pivotal.github.com/jasmine/)是您可能用于此工作的工具之一

然后,您必须测试它在您的结构中的集成。怎么做?你会回到cucumber和selenium(http://seleniumhq.org/)使用cucumber框架,您将能够在浏览器中“实时”测试您的集成,访问javascript魔术并在现场进行测试

因此,在完成这些步骤之后,您将了解到拥有一个集成良好的测试环境所需的大部分步骤。我们结束了吗?不是真的。您还应该设置一个覆盖工具(一个可用的工具:)来检查您的代码是否经过了很好的测试,并且没有遗留的漏洞

在完成了这些枯燥的步骤之后,您还应该做最后一件事,以防您不是单独开发的,而且团队规模足够大,仍然无法自行管理:您将设置一个测试服务器,它除了定期运行前面的所有步骤并发送有关其结果的通知之外,什么也不做

因此,所有这些都为感兴趣的开发人员设置了一个良好的TDD环境。我只为不同类型的测试命名了ruby/rails社区中使用最多的框架,但这并不意味着没有其他框架适合您的工作。它仍然不能教你如何正确地测试。对于这一点,涉及到更多的理论,还有很多次辩论

如果我忘了什么,请写在下面的评论中


除此之外,您还应该正确对待测试方法。也就是说,您是选择声明式方法还是命令式方法

当我开始学习rails时,我也有同样的问题,有很多工具或方法可以让测试变得更好,但在花了很多时间之后,我终于意识到,你可以忘记你必须做什么或不做什么的规则,先测试一些你认为可能有问题的东西,然后再测试其他地方。嗯,这需要时间


这正是我的观点。

从简单开始,根据需要添加更多的工具和技术。TDD应用程序的方法很多,因为每个应用程序都是不同的。一种方法是从Rspec和Capybara(或Cucumber和Capybara)的端到端测试开始,然后根据需要添加更多细粒度测试

您知道,当需要几分钟以上的时间才能通过水豚测试时,您需要更多细粒度测试

此外,如果应用程序的域非常重要,那么首先开始测试域可能会更有成效


这要看情况了!尝试不同的方法,看看哪些方法适合您。

端到端到底需要什么?集成测试是第一种方法吗?您编写了一个测试,模拟用户在浏览器中的操作,并分析用户在浏览器中看到的内容。我就快到了(请原谅)。。。但这是通过rspec集成测试来完成的,是吗?是的,这将是我首选的方法。谢谢你的全面回答!rspec不也提供集成测试吗?我看到很多教程一起使用rspec和capybara编写集成测试。那么黄瓜/水豚是否与rspec/水豚做了相同的事情?如果是这样,从rspec/水豚转换到rspec/水豚有什么好处