您最喜欢的测试“宝石”或红宝石和铁轨中的“插件”

时间:2010-12-05 16:03:04

标签: ruby-on-rails ruby unit-testing tdd

好人。我喜欢TDD和测试。我个人认为在开发时这是一个很好的做法。

因为我正在练习红宝石,所以我从未觉得有必要像rspec那样尝试一些“测试宝石”。我尝试过Cucumber进行高级测试和webrat进行集成测试。

您喜欢什么宝石以及为什么?

请提供一些示例或指向解释差异的网站。

例如,我为什么要从基本单元测试切换到FWK导轨给我rspec?从webrat到capybara?从黄瓜到扒手?

这可能是徒劳的事情,比如:我喜欢这个,因为控制台输出是彩色的更重要的事情:我喜欢那个因为我觉得写作时更有表现力++反对:++++

如果这个问题已经存在,请将链接发送给我!

修改

我将标题更改为更明确!

3 个答案:

答案 0 :(得分:3)

ruby​​只提供了大量的测试框架,选择一个真正的个人偏好。我个人最喜欢的是riot

Riot对如何编写测试做了一些假设。两个大问题是你应该每次测试测试一个“东西”,并且断言不应该修改那个“东西”。通过做出这些假设,测试可以大大加快,因为它们只需要每个块运行一次设置(而不是每次测试一次)。

自述文件中的一个例子

context "An Array" do
  setup { Array.new }

  context "with one element" do
    setup { topic << "foo" }
    asserts("is not empty") { !topic.empty? }
    asserts("returns the element on #first") { topic.first == "foo" }
  end
end

topic是您引用setup中设置内容的方式。这也只是语法的基础知识,有一个“断言宏”的想法让你干掉你的测试。您也可以使用denies而不是asserts作为否定断言。考虑到这两点,上面的例子可以写成

context "An Array" do
  setup { Array.new }

  context "with one element" do
    setup { topic << "foo" }
    denies("is not empty") { topic }.empty?
    asserts("returns the element on #first") { topic.first }.equals('foo')
  end
end

仍然是冰山的一角,但希望这给你至少一点感觉。

我会说除了速度之外,我最喜欢骚乱的是它的结构。它带走了一些自由,但实际上只是做坏事的自由。我发现我遇到问题的唯一时间就是我要写一个糟糕的测试,而不能这样做会迫使我退后一步思考我在做什么。


我提到的另一件事TDD是spork。这个想法是加载rails环境很容易需要30-40秒,当你做tdd时,这可能会非常快。 spork做的是设置rails环境,然后在每次测试运行时分叉进程。一切都已经在内存中,因此测试运行开始非常快。

目前,他们支持rspec,黄瓜和测试/单位。 (当我有一段时间时,有一天计划提供骚乱支持)

答案 1 :(得分:2)

我喜欢minitestcheatsheet),因为它非常小而且非常快。它包括单元测试和规范系统(以及模拟和基准测试)。我个人赞成单元测试而不是规格,因为Cucumber之类的语法似乎是“只读”(与'只写'语言相反,如Perl或APL :)。

答案 2 :(得分:1)

我目前的最爱是:

Cucumber(和Aruba用于CLI)

  • 自然语言方法是一大优点。
  • 写出来很容易 功能以确保的方式 他们实际上有意义发展。

RSpec 2

  • 再一种更自然的语言方法是一个巨大的帮助。我讨厌所有“断言”mumbo-jumbo。
  • 很多匹配者,我没有碰到过我无法测试的状况,就像我和Aruba一样。
  • 这真的非常容易使用。

Autotest用于持续测试。

  • 它可以运行所有主要的测试框架。
  • 它支持咆哮,所以我可以在测试失败时看到弹出窗口。