Как смоделировать функцию basic_get? - PullRequest
0 голосов
/ 01 апреля 2019

Я хотел бы смоделировать функцию pika basic_get, которая не импортируется напрямую ни в один из моих модулей. Вывод результата указывает на объект MagicMock, но когда я вызываю basic_get непосредственно в функции тестирования, имитация работает. Какие шаги я могу предпринять, чтобы решить эту проблему?

cli.py

@click.command
def main():
    connection, channel = get_con()
    message = channel.basic_get('some_queue', no_ack=True)
    print(message)

con.py

def get_con.py
    parameters = pika.URLParameters('amqp://')
    connection = pika.BlockingConnection(parameters)
    channel = connection.channel()
    return connection, channel

test.py

@patch('pika.channel.Channel.basic_get')
def test_something(basic_get_mock):
    with patch('con.get_con', return_value=(MagicMock(), MagicMock())) as get_con_mock:
        basic_get_mock.return_value = 45
        runner = CliRunner()
        result = runner.invoke(main)
        print(result.output)   

1 Ответ

1 голос
/ 01 апреля 2019

Вы уже издеваетесь get_con, поэтому нет необходимости издеваться над оригинальным классом; просто настройте макет, который вы уже создаете.

def test_something():
    mock_conn = MagicMock()
    mock_channel = MagicMock()
    with patch('con.get_con', return_value=(mock_conn, mock_channel)):
        mock_channel.basic_get.return_value = 45
        runner = CliRunner()
        result = runner.invoke(main)
        print(result.output)
...