我正在阅读minitest的模拟功能。
require "minitest/autorun"
mock = MiniTest::Mock.new
mock.expect(:use_any_string, true, [String])
mock.use_any_string("foo")
## mock.use_any_string(1)
## MockExpectationError: mocked method :use_any_string called with unexpected arguments [1]
## I do not understand the purpose for this
mock.verify
所以我不明白使用mock.verify
的目的,因为尝试将非String的任何其他类型(传递给use_any_string
)都会导致模拟期望错误。
那么为什么要使用assert mock.verify
?
答案 0 :(得分:1)
您是对的,您无法为配置的模拟设置任何其他设置,但是如果根本没有调用模拟,则可以使用mock.verify
进行查找。因此,如果您要测试的方法应该调用模拟方法,则应该验证它是否完全被调用。
答案 1 :(得分:0)
您是正确的,如果未对模拟进行预期的调用,mock.expect(:use_any_string, true, [String])
将导致测试失败。
但是,使用mock.verify
取决于您的测试方式。在您的示例中,您正在显式调用要使用mock.use_any_string("foo")
测试的方法,因此无需同时调用mock.verify。
您可能会遇到一种情况,即您没有明确地进行此调用,或者期望该模拟在特定时间进行了调用。这些方案将利用模拟调用验证。
(另一点说明,minitest最近引入了assert_mock,可以用来代替mock.verify)