我看到Minitest提供了Mock和stubbing。那么为什么有人会使用摩卡宝石进行嘲弄和抄袭? Minitest存根和模拟是否有限制。如果是,那么有人可以解释一下。
答案 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存根添加更多作者信息来修复测试,这与当前测试无关。