Zia*_*mar 5 mocking stub minitest
我看到 Minitest 提供了 Mock 和存根。那么为什么有人使用 mocha gem 进行嘲笑和存根呢?Minitest 存根和模拟是否有限制。如果是,那么有人可以解释一下。
小智 1
我有同样的问题,并且正在寻找答案。Roy Osherove 所著的《单元测试的艺术》一书可以提供帮助。我正在阅读它并找到了一些见解。
我推荐它作为评估框架的参考。Mocha 是一个隔离框架。因此,罗伊举例指出,良好的隔离框架可以提供“面向未来的保障”。所以它应该提供“递归伪造”。
将其翻译为 Rspec,它是“as_null_object”,而在 Mocha 中,它是“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
Run Code Online (Sandbox Code Playgroud)
为了引入变化,图书馆还希望更新其作者列表。测试会出现错误。不是失败。
我喜欢这个,因为它暗示我在这里做了一些邪恶的事情。
我应该通过提取两个方法“add_new_title”和“add_new_author”来引入另一个间接级别。这样,这个测试逻辑将测试“add_new_title”函数,我们可以轻松地删除“add_new_author”函数。我相信这是“add_book”函数更好的设计。
我不应该通过向latest_book 存根添加更多作者信息来修复测试,这与当前测试无关。
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |