【问题标题】:Minitest and Rspec [closed]Minitest 和 Rspec [关闭]
【发布时间】:2012-09-10 08:07:53
【问题描述】:

我刚刚观看了 Minitest 的 Railscast

使用 RSpec 与 Minitest 测试 Rails 应用程序的优缺点是什么?从 RSpec 转换到 Minitest 会丢失哪些功能?

【问题讨论】:

  • 或许这两个问题应该合并,有没有合并问题的方法?
  • 以 +12 票结束!!!投票开放。
  • 近距离投票的问题是它们通常不是很有建设性...

标签: ruby-on-rails ruby testing rspec minitest


【解决方案1】:

我是 RSpec 开发人员之一,从未使用过 minitest,因此在阅读此答案时请考虑到我的偏见。

总的来说,RSpec 的强大之处在于它将许多测试概念具体化为一流的对象。其中 Test::Unit 和 Minitest 使用简单的方法进行断言,RSpec 使用支持否定、自我描述等的一流匹配器对象。 RSpec 的示例是支持丰富元数据的一流对象; minitest/spec 将it 块编译成简单的方法,这些方法不支持相同类型的丰富元数据。 RSpec 支持使用接受参数的一流构造(共享示例组)来指定共享行为; w/ minitest 你可以使用inheritance or a mixin to re-use tests,但它没有同类的一流支持。 RSpec 有一个明确的格式化程序 API(并且有许多第三方格式化程序使用它);我不知道 minitest 具有相同类型的一流格式化程序 API。

作为一个整天不断地运行测试和练习 TDD 的人,我发现 RSpec 赋予我的力量非常有用。但是,许多人认为它是多余的,而且额外的抽象会增加认知成本。

以下是我认为 minitest 缺乏的 RSpec 的一些特定功能:

  • before(:all) hooks(注意这是 RSpec 的高级用户功能,应该很少使用;在使用 RSpec 的多年中,我只使用过几次)
  • around(:each)钩子
  • 共享示例组
  • 共享上下文
  • 丰富的元数据支持可用于控制运行哪些示例、包含哪些示例组共享上下文、哪些示例组模块混入等等。
  • 使用 rspec-mocks 集成了对各种模拟功能的支持;相比之下,Minitest::Mock 更简单,也更受限制。
  • RSpec 有rspec-fire,太棒了。

使用 Minitest 的好处:

  • 它内置在标准库中,因此您无需安装任何额外的东西。
  • 它可以用于def test_blahit 'blah' 样式。
  • 代码库非常小而且简单。 RSpec,由于它的年龄和附加功能,相比之下更大。
  • Minitest 加载速度比 RSpec 快(它大约需要 4 个代码文件,而 RSpec 有许多文件分布在 3 个 gem 中)——但请注意,RSpec 绝不慢;这些天来,在我的大多数项目中,我都会在不到一秒(通常不到 500 毫秒)内从 RSpec 获得测试反馈。

总的来说,它有点像 Sinatra 与 Rails,我认为 Minitest 和 RSpec 都是不错的选择,具体取决于您的需求。

最后一件事:如果您更喜欢 Minitest 的某些特定方面,但您更喜欢 RSpec 的其他方面,它们可以轻松混合和匹配。我wrote a blog post about this,如果你有兴趣。

【讨论】:

  • 请注意,在 2020 年 rspec-fire 已“完全过时”,其功能已内置到 RSpec 3 本身中。
【解决方案2】:

我从Test/Unitshoulda 转换为规范风格的Minitest,它得到了回报。它消除了样板文件,他们说它也提高了速度。我从来没有真正使用过 RSpec。相反,我编写了自己的原始测试和模拟框架(只是为了理解模拟,我在切换到 Minitest 时放弃了它)。我认为 RSpec 中的 stubbing/mocking 可能更高级,所以如果你已经学会了,就继续使用它。否则,请坚持使用 Minitest,这将使您能够与不了解 RSpec 的人合作,例如我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多