有什么方法可以验证一个从未被调用或只被调用了几次的方法,使用Minitest::Mock
先谢谢你
特定的次数。Minitest::Mock迫使开发者明确消息的期望值 所以如果你期望一个给定的方法被调用的话 x
次,你需要很字面的了解它。
my_mock = Minitest::Mock.new
x.times { my_mock.expect :some_method, :return_val }
从来不叫。从哲学上讲,Minitest避开了对某件事情没有发生的测试。 虽然这不是完全的类比,但可以看一看 此职位 或谷歌 "minitest assert nothing raised"。
Minitest::Mock 将会引发一个 NoMethodError
每当一个意想不到的方法被调用时,它就会被调用。 这不完全是一个断言,但可能有预期的效果。 不过,你并不特别需要一个 mock 来完成你的要求。 你可以通过修补你的真实对象实例来实现同样的目的。
def test_string_size_never_called
str = "foo"
def str.size
raise NoMethodError, "unexpected call"
end
# test logic continues...
end
我也想测试一下这样的东西,我用了下面的方法。
ClassName.any_instance.expects(:method_name).never
这种测试特别方便,当一个方法有一些via-via调用,你推测它被调用,即使没有应该触发它的动作。我用它来为某个动作写正向和负向测试用例。在我看来,这只是把否定的情况整理得很好。