简体   繁体   English

如何重新定义python3 MagicMock魔术方法?

[英]How to redefine python3 MagicMock magic method?

I need to redefine MagicMock's magic method in the child class and then use child class for testing, so I've tried: 我需要在子类中重新定义MagicMock's magic方法,然后使用子类进行测试,因此我尝试了:

from unittest.mock import MagicMock


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


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

But why NotImplemented ? 但是,为什么NotImplemented I know I can do it: 我知道我可以做到:

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>

So, I can't redefine MagicMock 's magic methods? 因此,我无法重新定义MagicMock的魔术方法?

You can use instead 您可以改用

t1.__lt__.return_value = t1

From what I can understand from https://github.com/python/cpython/blob/4002d5dbf4c058bbf2462f9f5dea057956d1caff/Lib/unittest/mock.py#L1834 MagicMixin remove all other magic methods. 从我从https://github.com/python/cpython/blob/4002d5dbf4c058bbf2462f9f5dea057956d1caff/Lib/unittest/mock.py#L1834可以理解的方法中, MagicMixin删除了所有其他魔术方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM