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

问题描述 投票:8回答:2

有什么方法可以验证一个从未被调用或只被调用了几次的方法,使用Minitest::Mock

先谢谢你

ruby mocking minitest
2个回答
11
投票

特定的次数。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

0
投票

我也想测试一下这样的东西,我用了下面的方法。

ClassName.any_instance.expects(:method_name).never

这种测试特别方便,当一个方法有一些via-via调用,你推测它被调用,即使没有应该触发它的动作。我用它来为某个动作写正向和负向测试用例。在我看来,这只是把否定的情况整理得很好。

© www.soinside.com 2019 - 2024. All rights reserved.