有没有办法验证一个从未调用的方法,或者只使用Minitest :: Mock调用多次
提前致谢
答案 0 :(得分:8)
具体次数:
Minitest :: Mock强制开发人员明确了解消息期望,因此如果您希望给定方法被调用x
次,那么您需要非常直接地了解它。
my_mock = Minitest::Mock.new
x.times { my_mock.expect :some_method, :return_val }
从未致电: 从哲学上讲,Minitest回避测试不会发生的事情。虽然它不完全类似,但请查看this post或谷歌“minitest断言没有提出任何内容”。
Minitest :: Mock会在调用意外方法时引发NoMethodError
。这不是一个断言,但可能具有预期的效果。尽管如此,你并不特别需要模拟来做你所要求的。你可以通过修补你的真实对象实例来做同样的事情。
def test_string_size_never_called
str = "foo"
def str.size
raise NoMethodError, "unexpected call"
end
# test logic continues...
end
答案 1 :(得分:1)
我也想测试类似的东西,所以我使用了下面的方法
ClassName.any_instance.expects(:method_name).never
当对方法进行一些via-via调用并且您推测即使没有触发该方法的操作也可以调用该方法时,这种测试特别方便。我用它来为特定动作编写正面和负面的测试用例。在我看来,这完全可以很好地排除负面情况。