我刚刚观看了Minitest 的Railscast。
使用 RSpec 与 Minitest 测试 Rails 应用程序的优缺点是什么?从 RSpec 转换到 Minitest 会丢失哪些功能?
我是 RSpec 开发人员之一,从未使用过 minitest,因此在阅读此答案时要考虑到我的偏见。
总的来说,RSpec 的强大之处在于它将如此多的测试概念具体化为一流的对象。其中 Test::Unit 和 Minitest 使用简单的方法进行断言,RSpec 使用支持否定、自我描述等的一流匹配器对象。RSpec 的示例是支持丰富元数据的一流对象;minitest/spec 将it
块编译成简单的方法,这些方法不支持相同类型的丰富元数据。RSpec 支持使用接受参数的一流构造(共享示例组)来指定共享行为;w/ minitest 您可以使用继承或 mixin 来重用测试,但它没有同类的一流支持。RSpec 有一个明确的格式化程序 API(并且有许多第三方格式化程序使用它);我不知道 minitest 具有相同类型的一流格式化程序 API。
作为一个整天不断地运行测试和练习 TDD 的人,我发现 RSpec 赋予我的力量非常有用。然而,许多人发现它是多余的,而且额外的抽象会增加认知成本。
以下是我认为 minitest 缺乏的 RSpec 的一些特定功能:
before(:all)
钩子(注意这是 RSpec 的一个高级用户功能,应该很少使用;在使用 RSpec 的多年中,我只在少数场合使用过它)around(:each)
挂钩使用 Minitest 的好处:
def test_blah
也可以用于it 'blah'
样式。总的来说,它有点像 Sinatra vs. Rails,我认为 Minitest 和 RSpec 都是不错的选择,具体取决于您的需求。
最后一件事:如果您更喜欢 Minitest 的某些特定方面,但您更喜欢 RSpec 的其他方面,它们可以很容易地混合和匹配。我写了一篇关于这个的博客文章,如果你有兴趣的话。
Test/Unit
我从with转换为规范风格的 Minitest shoulda
,它得到了回报。它取消了样板文件,他们说它也提高了速度。我从来没有真正使用过 RSpec。相反,我编写了自己的原始测试和模拟框架(只是为了理解模拟,我在切换到 Minitest 时放弃了它)。我认为 RSpec 中的 stubbing/mocking 可能更高级,所以如果你已经学会了,就继续使用它。否则,坚持使用 Minitest,这将使您能够与不了解 RSpec 的人合作,例如我。