验证方法从未调用过或仅使用Minitest :: Mock调用一次

时间:2015-05-25 15:36:36

标签: ruby mocking minitest

有没有办法验证一个从未调用的方法,或者只使用Minitest :: Mock调用多次

提前致谢

2 个答案:

答案 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调用并且您推测即使没有触发该方法的操作也可以调用该方法时,这种测试特别方便。我用它来为特定动作编写正面和负面的测试用例。在我看来,这完全可以很好地排除负面情况。