两人快速介绍。简介:我是从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&行为驱动测试的公司。社区是否倾向于这种风格和这个框架?我应该从Rspec开始吗?
我将与这三个人玩一点,但我很想知道在Ruby 1.9中围绕测试形成了什么样的共识(如果有的话)。
(快速跟进,提醒我自己和任何感兴趣的人。请参阅this link,了解各种Rubies 1.8到1.9.1中Test :: Unit和MiniTest的不同调用的有用概述。)
答案 0 :(得分: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集成,并会告诉您代码缺少测试的位置。
答案 1 :(得分:6)
有共识吗?我不会说。使用TDD / BDD有很强的社区声音,但即使这样,它也不是普遍的。该框架可能不如首先应用该实践重要。
我认为minitest是Test :: Unit的1.9替代品,它仅作为新库的包装器存在以实现向后兼容。我猜想采用最小的特定路线会更具前瞻性。
RSpec略有不同:“传统的”受xUnit影响的框架不太明显。值得花一些时间来看看你是否喜欢它。
还有Shoulda。虽然我不知道它在1.9上是如何测试的:它更像是Test :: Unit的包装/扩展,所以它可能会起作用。
当然,乐趣并不止于此:一旦你选择了一个测试框架,你就会想要一种类似的模拟引擎。或者更换数据夹具。
在所有情况下,我会说任何可以找到定期更新证据的框架,一个开放的,人口稠密的社区和一个你不讨厌的API都可以完成这项工作。你做出任何选择都不太可能会被击落。
答案 2 :(得分:4)
RSpec是流行的Rails书籍的共识,如“The Rails Way”。优点恕我直言,测试读起来像英语,输出格式,如英语,和即时匹配。缺点是速度慢,图书馆有时感觉“神奇”,即对于熟悉Ruby和单元测试的编码人员来说太陌生。 RSpec还提供Cucumber和Gherkin,这些方法可以为用户提供有用的信息。
MiniTest内置于Ruby 1.9中。优点IMHO速度快,对于其他语言的编码器来说非常容易读/写,并且测试使用的代码风格与您在实际代码中使用的代码风格大致相同。 MiniTest比大多数人都知道得多,例如MiniTest Spec有类似RSpec的BDD匹配器,MiniTest Mock是一个模拟系统,MiniTest Benchmark用于性能分析。
根据我的个人经验,构建Rails应用程序的人倾向于RSpec,而构建纯Ruby代码的人倾向于使用MiniTest Unit,Spec,Mock,Benchmark等。
答案 3 :(得分:3)
我个人更喜欢rspec。我发现将测试重点放在行为上确实帮助我解决了我想要做的事情。
使用rspec去获取像Factory Girl或Machinist这样的东西来生成测试数据,不要使用灯具。
关于Mike所说的,rspec项目非常活跃,每个版本的rails都会正常发布新版本,以帮助它跟上框架的开发。
答案 4 :(得分:1)
RSpec很不错但我认为最近在Ruby {1.}之后的Minitest背后有很多讨论和动作。它有很多RSpec的细节,但更精简,更简洁。