在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)
使用mock和patch,我可以检查该令牌是否在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
答案 0 :(得分:3)
您需要具体说明通话的发生地点。代码是:
slack.chat.post_message
因此,由于slack
是模拟类Slacker
的一个实例,因此您需要使用return_value
来确保您正在谈论该实例:< / p>
mock_slacker.return_value.chat.post_message.assert_called_with
您已对'slacker_cli.Slacker'
进行了修补,因此mock_slacker
是一个已修补的课程。调用本身发生在该修补类的实例上。调用类会返回一个实例,因此使用return_value
。