11

一个快速介绍的两部分。简介:我从 Perl 转向 Ruby,在测试框架的选择中我有点迷茫。我知道可能没有单一的、全方位的最佳选择,但我什至无法清楚地了解比赛场地。

那么,首先,MiniTest 还是 Test::Unit?我刚刚意识到 1.9.1 现在默认为 MiniTest。我没有注意到,因为所有较旧的 Test::Unit 教程仍然可以正常工作。如果你require test/unit,你实际上将 MiniTest 作为一个 Test::Unit 模拟器 (!)。我最初的想法是使用 MiniTest 的默认选择(一旦我知道它在那里),但即使是最近的书籍似乎也没有兴趣教授它。Ruby Best Practices说两者之间“存在显着差异”,但他选择不处理它们。他还通过 Test::Unit (加上一些自定义附加组件)运行他的所有测试。新的 Pickaxe本身对 MiniTest 的了解也很少,并且在关于测试的章节中,他们还使用了 MiniTest 的 Test::Unit 仿真版本。然后澄清我的第一个问题:MiniTest 是一个糟糕的首选吗?我应该默认使用 Test::Unit 模拟器吗?

其次,除了内置选项之外,还有 Rspec、Cucumber & company 用于行为驱动测试。社区是否强烈倾向于这种风格和框架?我应该从 Rspec 开始吗?

我将对这三个方面进行一些尝试,但我很想知道围绕 Ruby 1.9 中的测试正在形成什么样的共识(如果有的话)。

(快速跟进,作为对我自己和任何感兴趣的人的提醒。请参阅此链接以获取有关不同红宝石 1.8 到 1.9.1 中 Test::Unit 和 MiniTest 不同调用的有用概述。)

4

5 回答 5

7

我已经使用 Rspec 一年左右了。我特别从 Test::Unit 切换,因为我可以以人类可读的方式打印正在测试的内容。

它读起来像散文。这对我来说是一大优势。但与所有事情一样,结果会有所不同。

describe Model do
  it "should do what I want" do
    this.should == that
    it.should be_nil
    that.should_not be_true
  end
end 

同样无视测试框架,您还应该考虑像RCov这样的覆盖工具。它与 rspec 集成,并会告诉您代码缺少测试的地方。

于 2009-07-28T17:20:51.107 回答
6

有共识吗?我会说不是。使用 TDD/BDD 的社区声音很强烈,但即便如此,它也不是通用的。该框架可能不如首先应用该实践重要。

我相信 minitest 是 Test::Unit 的 1.9 替代品,它仅作为新库的包装器存在,以实现向后兼容性。我猜想走 minitest-specific 路线会更具前瞻性。

RSpec 有点不同:不太明显地被“传统的”受 xUnit 影响的框架所注入。花一些时间看看你是否喜欢它是值得的。

还有应该。虽然我不知道它在 1.9 上的测试情况如何:它更像是 Test::Unit 的包装器/扩展,所以它可能会起作用。

当然,乐趣并不止于此:一旦您选择了一个测试框架,您将需要某种模拟引擎。或更换数据夹具。

在所有情况下,我想说任何可以找到定期更新证据的框架、一个开放的、人口稠密的社区和一个你不讨厌的 API 都可以完成这项工作。你不太可能因为做了任何选择而被击落。

于 2009-07-28T18:18:07.370 回答
4

RSpec 是流行的 Rails 书籍如“Rails Way”的共识。恕我直言,优点是读起来像英语的测试,读起来像英语的输出格式,以及即时匹配器。缺点是速度慢,而且库有时会让人觉得“神奇”,即对于更熟悉 Ruby 和单元测试的编码人员来说太陌生了。RSpec 还提供 Cucumber 和 Gherkin,它们是编写用户故事的方法,这些故事有助于客户接受。

MiniTest 内置于 Ruby 1.9 中。恕我直言,优点是速度快,对于其他语言的编码人员来说非常容易读/写,并且测试使用的代码风格与您在真实代码中使用的代码风格几乎相同。MiniTest 比大多数人知道的要多得多,例如 MiniTest Spec 有类似于 RSpec 的 BDD 匹配器,MiniTest Mock 是一个模拟系统,MiniTest Benchmark 用于性能分析。

以我个人的经验,构建 Rails 应用程序的人倾向于 RSpec,而构建纯 Ruby 代码的人倾向于 MiniTest Unit、Spec、Mock、Benchmark 等。

于 2011-04-30T19:11:31.510 回答
3

I personally perfer rspec. I found that focusing my tests on behaviour really helped me get around what I was trying to do.

With rspec go and get something like Factory Girl or Machinist to generate your test data, don't use fixtures.

With regard to what Mike said, the rspec project is fairly active with new versions being released normally with each version of rails to help it keep up with the development of the framework.

于 2009-07-30T11:26:45.297 回答
1

RSpec 很好,但我认为最近在Ruby 1.9.x 附带的Minitest背后有很多讨论和运动。它有很多 RSpec 的优点,但更精简和简洁。

于 2012-05-03T13:08:25.013 回答