Techioz Blog

Minitest::Mock を使用してメソッドが一度も呼び出されていないか、または 1 回だけ呼び出されているかを確認する

概要

Minitest::Mock を使用して、一度も呼び出されなかったメソッド、または数回しか呼び出されなかったメソッドを検証する方法はありますか

前もって感謝します

解決策

具体的な回数: Minitest::Mock では、開発者はメッセージの期待値について明示的にする必要があるため、特定のメソッドが x 回呼び出されることが予想される場合は、それを文字通りに表現する必要があります。

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

決して電話をかけたことがない: 哲学的には、Minitest は何かが起こらないことをテストすることを避けます。完全に類似しているわけではありませんが、この投稿を参照するか、Google で「minitestassert nothing raises」をご覧ください。

Minitest::Mock は、予期しないメソッドが呼び出されるたびに NoMethodError を発生させます。これは正確には主張ではありませんが、おそらく望ましい効果があります。それでも、求めていることを実行するために特にモックは必要ありません。実際のオブジェクト インスタンスにパッチを適用することで、同じことを行うことができます。

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

  # test logic continues...
end