【问题标题】:Verify method never called or only once called using Minitest::Mock验证方法从未调用过或仅使用 Minitest::Mock 调用过一次
【发布时间】:2015-05-25 15:36:36
【问题描述】:

有什么方法可以验证一个从未调用过或只调用过多次使用 Minitest::Mock 的方法

提前致谢

【问题讨论】:

  • 考虑将TracePoint 类与:callevent 一起使用。

标签: ruby mocking minitest


【解决方案1】:

具体次数: Minitest::Mock 强制开发人员明确消息期望,因此如果您希望给定方法被调用x 次,您需要非常明确地说明它。

my_mock = Minitest::Mock.new
x.times { my_mock.expect :some_method, :return_val }

从未打电话: 从哲学上讲,Minitest 避免测试没有发生的事情。虽然它并不完全相似,但请查看this post 或谷歌“minitest assert nothing raise”。

Minitest::Mock 会在每次调用意外方法时引发NoMethodError。这并不完全是一个断言,但可能具有预期的效果。尽管如此,你并不特别需要一个模拟来做你所要求的。你可以通过修补你的真实对象实例来做同样的事情。

def test_string_size_never_called
  str = "foo"
  def str.size
    raise NoMethodError, "unexpected call"
  end

  # test logic continues...
end

【讨论】:

  • 对于 x 次,我们将如何验证该方法只被调用了 x 次而不是 x+1 次?
  • 因为当你第 n+1 次调用你的方法时,你会得到一个 MockExpectationError。请参阅以下要点:gist.github.com/chriskottom/b9a73eaffb2c5b5b6676
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 2011-07-19
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多