有效的TDD策略有哪些部分?

时间:2012-10-15 02:44:48

标签: ruby-on-rails rspec tdd capybara

我真的对学习如何使用TDD正确开发软件感到沮丧。似乎每个人都以不同的顺序做不同的事情。在这一点上,我想知道所有的考虑因素是什么?这就是我想出的:我应该使用rspec和capybara。话虽如此,我需要编写的所有不同类型的测试是什么,以便拥有一个构建良好且经过测试的应用程序。我正在寻找一个列表,其中包含我正在测试的应用程序区域,测试它所需的框架以及任何依赖项。

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

4 个答案:

答案 0 :(得分:3)

嗯,主题为“你如何进行TDD”的主题是“你如何正确测试?”这一主题。在Ruby中,更具体地说是在Rails中,rspec应该是开始的工具,但不能完成。 RSpec允许您为组件编写单元测试,以单独测试它们。在Rails上下文中,这意味着:

  • 测试您的模型
  • 测试您的控制器
  • 测试您的观点
  • 测试你的助手
  • 测试路线

这是一个非常好的工具,不完全是rails绑定的,它也用于测试其他框架。

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

完成黄瓜后,您将完成测试应用程序后端和(部分)HTML输出。那时你也应该测试你的javascript代码。怎么做?首先,你必须对它进行单元测试。 Jasmine(http://pivotal.github.com/jasmine/)是您可能用于工作的工具之一。

然后你必须在你的结构中测试它的集成。怎么做?您将回到黄瓜并将selenium(http://seleniumhq.org/)与您的黄瓜框架集成,您将能够在浏览器中“实时”测试您的集成,可以访问您的javascript魔法和测试它就在现场。

因此,在完成这些步骤之后,您将完成大部分必要步骤,以获得良好集成的测试环境。我们完了吗?并不是的。您还应该设置一个覆盖工具(一个可用:https://github.com/colszowka/simplecov)来检查您的代码是否经过了很好的测试,并且没有剩余的松散结束。

在完成这些郁闷的步骤之后,你还应该做最后一件事,如果你不是单独开发它并且团队足够大,使它本身仍然无法管理:你将设置一个测试服务器,除了定期运行所有前面的步骤并发送有关其结果的通知之外什么都不做。

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

如果我忘记了某些内容,请在下面的评论中写下来。

除此之外,你应该接近你正确测试的方法。也就是说,您是采用声明式还是命令式方法?

答案 1 :(得分:2)

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

你知道,当需要花费几分钟的时间才能完成Capybara测试时,你需要进行更细粒度的测试。

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

这取决于!尝试不同的方法,看看哪些方法适合你。

答案 2 :(得分:1)

使用TDD进行实际应用程序的端到端开发确实是一项未充分利用的活动。确实,你们大多会找到教科书的例子,katas和理论文章。然而,一些书籍对TDD采取了更全面和实用的方法 - 例如GOOS(强烈推荐),并且在较小程度上,Beck的Test Driven Development by Example,尽管他们没有特别针对RoR。

GOOS中描述的方法从编写端到端验收测试(集成测试,在您的情况下可能相当于RSpec测试)开始,但在该循环中,您编写尽可能多的TDD < em> unit 测试,因为您需要设计较低级别的对象。在编写这些内容时,您基本上可以从所需的位置开始 - 从外层,内层或应用程序中最方便的部分。只要你嘲笑任何依赖,他们无论如何都将继续进行单元测试。

答案 3 :(得分:0)

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

这只是我的观点。