Python magicmock导致“NoneType”对象没有属性“unregister”

2024-10-01 13:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用我编写的自定义mock修补函数调用

    subscriberMock = MagicMock(side_effect=subscriber)
    subscriberMock.return_value.unregister.return_value = True
    with patch('rospy.Subscriber', subscriberMock):
        data['op'] = "unsubscribe"
        data['topic'] = "/helo"
        self.rosbridge.incoming(data)

内部方法有这段代码

^{pr2}$

但是,当我运行这个时,它返回一个属性错误

'NoneType' object has no attribute 'unregister'

我猜return_value被设置为一个NoneType,但我认为这个subscriberMock.return_value.unregister.return_value会覆盖它


更多信息:

如果我打印self.subscribers[topic],它将返回None。然后产生副作用。既然我有参数的返回值,self.subscribers[topic] = None为什么要这样呢。在


Tags: selfnonedatatopicreturnvaluemockside
1条回答
网友
1楼 · 发布于 2024-10-01 13:33:56

您必须编写一个mock来调用副作用中的实例化,而不是上面的mock

    def subscriber (topic, topic_type, outgoing_function):
        # convert to a ROS object
        output = ROSBridgeObject()
        output.foo = topic
        # pretend we got a message from what we subscribed to
        outgoing_function(output)
        mock = MagicMock()
        subscriberMock.unregister.return_value = True
        return mock
    subscriberMock = MagicMock(side_effect=subscriber)      

这是因为MagicMock要么有返回值,要么有副作用

相关问题 更多 >