如何为Pytest模拟库类

时间:2018-07-04 10:24:52

标签: python mocking pytest

我是模拟游戏的新手,并且测试python代码(无论哪种代码)。

我正在测试我的功能main.py

def get_channel_list():
    sc = SlackClient(get_token())
    channels_list_json = sc.api_call("channels.list")
    if channels_list_json['ok'] == True:
        return channels_list_json

这是我要测试的功能

我需要模拟补丁sc.api_call("channels.list")以返回JSON对象 但我找不到这样的例子来帮助我弄清楚该怎么做。

我发现的一切都像这个示例Mocking a class method...

我认为它看起来像这样:

@patch.object(SlackClient, 'api_call')
def test_get_channel_list():
    assert get_channel_list() != ""

我不必测试lib,我需要在我之前提到的函数中测试其余代码。 感谢您的帮助,我真的很愿意参加此测试。

1 个答案:

答案 0 :(得分:2)

您需要编写一个单独的模拟函数以返回JSON对象。

您可以尝试以下方法:

@pytest.fixture
def mock_api_call(monkeypatch):
    monkeypatch.setattr(SlackClient, 'api_call', lambda self, arg: {"ok": True})

def test(mock_api_call):
    sc = SlackClient(get_token())
    channels_list_json = sc.api_call("channels.list")
    assert True == channels_list_json['ok']

def test_get_channel_list(mock_api_call):
    channels_list_json = get_channels_list()
    assert dict == type(channels_list_json)