Python Mock не утверждает звонки

Я использую библиотеку mock для исправления класса в программе, которая подключается к внешнему ресурсу и отправляет диктовку.

Структура выглядит так...

code.py

def make_connection():
    connection = OriginalClass(host, port)
    connection.connect()
    connection.send(param)
    connection.close()

test.py

@mock.path('code.OriginalClass')
def test_connection(self, mocked_conn):
    code.make_connection()
    mocked_conn.assert_called_with(host, port)
    mocked_conn.connect.assert_called_once()
    mocked_conn.send.assert_called_with(param)

Первый assert_called_with работает отлично, но вызовы метода проверяемого класса не проходят. Я попытался использовать patch.object в качестве декоратора также без удачи.

1 ответ

Решение

connect() а также send() методы вызываются по возвращаемому значению первого вызова; скорректируйте свой тест соответственно:

mocked_conn.return_value.connect.assert_called_once()
mocked_conn.return_value.send.assert_called_with(param)

Обычно я сначала сохраняю ссылку на экземпляр:

@mock.path('code.OriginalClass')
def test_connection(self, mocked_conn):
    code.make_connection()
    mocked_conn.assert_called_with(host, port)
    mocked_instance = mocked_conn.return_value
    mocked_instance.connect.assert_called_once()
    mocked_instance.send.assert_called_with(param)
Другие вопросы по тегам