Как макетировать библиотечный класс для Pytest - PullRequest
0 голосов
/ 04 июля 2018

Я новичок в тесте и тестах для кода на 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 но я не могу найти подобных примеров, которые помогли бы мне понять, как это сделать.

Все, что я нашел, было похоже на этот пример Насмешка над методом класса ...

Я думаю, это будет выглядеть так:

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

Мне не нужно тестировать lib, мне нужно протестировать остальную часть моего кода в функции, которую я упоминал ранее. Спасибо за любую помощь, я действительно стекаюсь с этим тестом.

1 Ответ

0 голосов
/ 04 июля 2018

Вам нужно написать отдельную фиктивную функцию для возврата объекта 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)
...