如何重新定义python3 MagicMock魔法?

时间:2018-01-22 12:32:22

标签: python python-3.x mocking

我需要在子类中重新定义MagicMock's魔术方法,然后使用子类进行测试,所以我尝试过:

from unittest.mock import MagicMock


class MockForTest(MagicMock):
    def __lt__(self):
        return self


t1 = MockForTest()
print(t1.__lt__())  # prints NotImplemented

但为什么NotImplemented?我知道我能做到:

class A():
    def __lt__(self):
        return NotImplemented


class B(A):
    def __lt__(self):
        return self


b = B()
print(b.__lt__())  # prints <__main__.B object at 0x000001D6EE77B2B0>

那么,我无法重新定义MagicMock的魔法?

1 个答案:

答案 0 :(得分:0)

您可以使用

t1.__lt__.return_value = t1

https://github.com/python/cpython/blob/4002d5dbf4c058bbf2462f9f5dea057956d1caff/Lib/unittest/mock.py#L1834 MagicMixin中我可以理解,删除所有其他魔术方法。