我在弄乱unittest.mock并遇到了一些问题。

我有一个方法为client的对象get_messages(),该对象返回具有属性responsedatahas_more。我想模拟它在第一次调用中返回固定的datahas_more,在第二次调用中返回另一个固定的datahas_more

在第一次通话中,我想接收具有属性的对象response
data=['msg1', 'msg2']
has_more=True

在第二个调用中,我想接收具有属性的对象response

data=['msg3', 'msg4']

我一直在尝试以这种方式进行操作,但我有点困惑,不知道这是否是这种方式。

@patch('Client')
def test_client_returns_correct_messages(self, MockClient):
    MockWebClient.get_messages.side_effects = [
    Mock(name='response',
         data={'messages': received_messages,
               'has_more': True}),
    Mock(name='response',
         data={'messages': received_messages,
               'has_more': False})]

messages = client.get_messages()

最佳答案

好的,我找到了答案...通常我的代码很好,但是我打了一个错字:side_effects而不是side_effect-NOTE THE。它应该是side_effect。 Mock接受所有内容,因此没有出现错误。下次一定会使用规范的:D我仍然不知道这是否是正确的方法,但是它有效。

这是工作代码:

@patch('Client')
def test_client_returns_correct_messages(self, MockClient):
    MockWebClient.get_messages.side_effect = [
    Mock(name='response',
         data={'messages': received_messages,
               'has_more': True}),
    Mock(name='response',
         data={'messages': received_messages,
               'has_more': False})]

messages = client.get_messages()

关于python - 如何模拟函数以返回带有属性的响应?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56975736/

10-11 19:13