【问题标题】:python mock patch : a method of instance is called?python mock patch:调用实例方法?
【发布时间】:2014-10-18 04:39:45
【问题描述】:

在python 2.7中,我有这个功能

from slacker import Slacker


def post_message(token, channel, message):
    channel = '#{}'.format(channel)

    slack = Slacker(token)
    slack.chat.post_message(channel, message)

通过模拟和补丁,我可以检查令牌是否在 Slacker 类中使用

import unittest
from mock import patch

from slacker_cli import post_message


class TestMessage(unittest.TestCase):

    @patch('slacker_cli.Slacker')
    def test_post_message_use_token(self, mock_slacker):
        token = 'aaa'
        channel = 'channel_name'
        message = 'message string'

        post_message(token, channel, message)

        mock_slacker.assert_called_with(token)

如何检查 post_message 中使用的字符串?

我试试

mock_slacker.chat.post_message.assert_called_with('#channel_name') 

但我明白了

AssertionError: Expected call: post_message('#channel_name')
Not called

【问题讨论】:

    标签: unit-testing python-2.7 mocking python-mock


    【解决方案1】:

    您需要具体说明通话地点。代码是:

    slack.chat.post_message
    

    因此,由于slack 是模拟类Slacker 的一个实例,因此您需要使用return_value 来确保您正在谈论该实例:

    mock_slacker.return_value.chat.post_message.assert_called_with
    

    你已经修补了'slacker_cli.Slacker',所以mock_slacker 是一个修补的类。调用本身发生在该修补类的实例上。调用类返回一个实例,因此使用return_value

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多