是否需要在 minitest 中验证模拟
Does verifying the mock is need in minitest
我正在阅读 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
呢?
你是对的,你不能为配置的模拟设置任何其他东西,但如果你的模拟根本没有被调用,那么你可以用 mock.verify
找出来。因此,如果您的被测方法应该调用模拟方法,您应该验证它是否被调用了。
你是对的,mock.expect(:use_any_string, true, [String])
如果没有在 mock 上进行预期的调用,将导致测试失败。
然而,使用 mock.verify
取决于您如何编写测试。在您的示例中,您显式调用了使用 mock.use_any_string("foo")
测试的方法,因此无需同时调用 mock.verify.
您可能会遇到这样一种情况,您没有明确地进行此调用,或者期望模拟在特定时间进行了调用。这些场景将利用 mock.verify 个调用。
(另外注意,最近minitest推出了assert_mock可以用来代替mock.verify)
我正在阅读 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
呢?
你是对的,你不能为配置的模拟设置任何其他东西,但如果你的模拟根本没有被调用,那么你可以用 mock.verify
找出来。因此,如果您的被测方法应该调用模拟方法,您应该验证它是否被调用了。
你是对的,mock.expect(:use_any_string, true, [String])
如果没有在 mock 上进行预期的调用,将导致测试失败。
然而,使用 mock.verify
取决于您如何编写测试。在您的示例中,您显式调用了使用 mock.use_any_string("foo")
测试的方法,因此无需同时调用 mock.verify.
您可能会遇到这样一种情况,您没有明确地进行此调用,或者期望模拟在特定时间进行了调用。这些场景将利用 mock.verify 个调用。
(另外注意,最近minitest推出了assert_mock可以用来代替mock.verify)