如果Minitest有stub和Mocks,为什么要使用mocha gem?

时间:2017-04-27 09:51:32

标签: mocking minitest stub

我看到Minitest提供了Mock和stubbing。那么为什么有人会使用摩卡宝石进行嘲弄和抄袭? Minitest存根和模拟是否有限制。如果是,那么有人可以解释一下。

1 个答案:

答案 0 :(得分:0)

我有同样的问题,正在寻找答案。 "单元测试的艺术",这本书由Roy Osherove提供帮助。我正在阅读它,并找到了一些见解。

我建议将其作为评估框架的参考。 Mocha是一个隔离框架。因此,例如,罗伊指出一个良好的隔离框架提供了“面向未来的”。所以它应该提供"递归假货"。

将其翻译为Rspec,它是' as_null_object'在摩卡的地方,它是“stub_everything'”。 Minitest存根没有此功能。

问题是,您是否容忍间接生产代码更改导致的测试失败?我做。因此,我不想让测试无声地通过,而是希望看到它们失败并为另一层间接而尖叫。

让我举例说明。

require 'minitest/autorun'

class LibraryTest < Minitest::Test
  def test_update_publisher__add_a_book__library_titles_include_the_new_title
    new_title = "the art of unit testing"
    library = Library.new

    Book.stub(:newest_book, {title: new_title}) do
      library.add_book Book.newest_book
    end

    assert_includes library.titles, new_title
  end
end

class Library
  attr_reader :titles, :authors
  def initialize
    @titles = []
    @authors = []
  end

  def add_book book
    titles << book[:title]
    # authors << book[:author][:first_name]
  end
end

class Book
  def self.newest_book
  end
end

引入更改,库也想更新其作者列表。测试会有错误。不是失败。

我喜欢这个,因为它暗示我在这里做了一件事。

我应该通过提取2个方法来引入另一个间接层次&#34; add_new_title&#34;和&#34; add_new_author&#34;。有了这个,这个测试逻辑将测试&quot; add_new_title&#34;功能,我们可以存根&quot; add_new_author&#39;功能很容易。我相信这是一个更好的设计,适用于&quot; add_book&#39;功能

我不应该通过向newest_book存根添加更多作者信息来修复测试,这与当前测试无关。