2017-06-07 6 views
0

私は内側の方法は、コードのこの部分を持っているPythonのmagicmock原因「NoneType」オブジェクトには属性「登録解除」

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) 

書いたカスタムモックと関数呼び出しにパッチを適用しようとしているがありません

self.subscribers[topic] = rospy.Subscriber(topic, 'msg', outgoing_function) 
self.subscribers[topic].unregister() # <-- AttributeError 

しかし、私はこれを実行すると、それは属性エラーに

「を返すNoneType」オブジェクトには属性「登録解除」を持っていない

私はreturn_valueを推測しているがNoneTypeに設定されているが、私はこのsubscriberMock.return_value.unregister.return_valueはそれを


詳細情報を上書きするだろうと思った:

私はself.subscribers[topic]を印刷する場合、それはNoneを返します。その後、副作用を実行します。 self.subscribers[topic] = Noneなぜ私はそれにパラメータの戻り値を持っている必要があります。代わりに、上記のモックの

+0

は 'の出力は何ですか副作用

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のいずれかが戻り値または副作用を持っているので、これは内インスタンス化を呼び出すモックを記述する必要がありあなたがそれを印刷するときにself.subscribers [トピック] '? –

答えて

0

、あなたは

関連する問題