简体   繁体   English

如何使用模拟装饰器模拟 class 的属性?

[英]How can I mock an attribute of a class using the mock decorator?

#these classes live inside exchanges/impl/tse/mixins.py

class PacketContext: 
    capture_tstamp = None
    def __init__(self, capture_tstamp=None):
        self.capture_tstamp = capture_tstamp

class SubParserMixin(): 
    def __init__(self): 
        self.context = PacketContext()

    def on_packet(self, packet):
        self.context.capture_tstamp = packet.capture_timestamp
        self.parse_er_data(packet.payload)



#this mock test lives in another python file
from exchanges.impl.tse.mixins import PacketContext

@patch.object(PacketContext, 'capture_tstamp', 1655417400314635000)
def test_receive_timestamp(self):
    """
    test receive_timestamp is passed down correctly from PacketContext to on_packet()
    """
    assert self.context.capture_tstamp == 1655417400314635000

I am trying to mock the self.capture_tstamp attribute in the PacketContext() class.我试图模拟PacketContext() class 中的self.capture_tstamp属性。

But in the above, I am getting an error that says但在上面,我收到一个错误,上面写着

    AssertionError: assert None == 1655417400314635000
E        +  where None = <exchanges.impl.tse.mixins.PacketContext object at 0x7fb324ac04c0>.capture_tstamp
E        +    where <exchanges.impl.tse.mixins.PacketContext object at 0x7fb324ac04c0> = <tests.unit.exchanges.tse.test_quote_write.TestTSE testMethod=test_receive_timestamp>.context

It seems very strange that the program is not recognising PacketContext() .程序无法识别PacketContext()似乎很奇怪。

You can make use of the patch.object decorator as below您可以使用 patch.object 装饰器,如下所示

class PacketContext:
    capture_tstamp = None
    def __init__(self, capture_tstamp=None):
        self.capture_tstamp = capture_tstamp

<import_PacketContext_here>

@patch.object(PacketContext, 'capture_tstamp', 1655417400314635000)
def test_receive_timestamp():
    test_instance = PacketContext()
    assert test_instance.capture_tstamp == 1655417400314635000

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

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