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)