0

特定のクラスのいくつかのすべての mox Mock オブジェクトが、異なるオブジェクト (少なくとも を返します) であるにもかかわらず==、意味で等しいように見えるという事実から派生したいくつかの問題が発生しています。その動作を防ぐ方法はありますか?__eq__mock1 is mock2False

以下のコード例では、すべてのモックが等しいと考えているため、カウントが間違っていることがわかります。

import mox

class MyClass(object):
    pass

real1 = MyClass()
real2 = MyClass()
listreal = (real1, real2)
mocker = mox.Mox()
mock1 = mocker.CreateMock(MyClass)
mock2 = mocker.CreateMock(MyClass)
listmock = (mock1, mock2)

real1 == real2  # False
real1 is real2  # False
listreal.count(real1)  # 1
mock1 == mock2  # True
mock1 is mock2  # False
listmock.count(mock1)  # 2
4

1 に答える 1

0

__eq__formox.MockAnythingとの実装はとmox.MockObjectを比較するだけなので、同じ呼び出しを期待しているモック オブジェクトは実際には「等しい」ようです。replay_modeexpected_calls_queue

class MockAnything:
  def __eq__(self, rhs):
    """Provide custom logic to compare objects."""

    return (isinstance(rhs, MockAnything) and
            self._replay_mode == rhs._replay_mode and
            self._expected_calls_queue == rhs._expected_calls_queue)

list.remove()などのメソッドのコレクションでモックが使用される場合、これにはいくつかの意味があります。

偽のメソッドにいくつかの呼び出しを追加して、モックが の目に等しくないようにする必要があり__eq__ます。

于 2014-10-12T17:56:16.160 に答える