Я тестирую код, который использует возвращаемое значение динамически созданной функции. Мне нужно убедиться, что код, который я тестирую правильно, вызывает функцию, называемую «email_invoice» с поддельными данными ...mock тестирование возвращаемого значения динамической функции
Динамически созданная функция попадает в удаленную систему, поэтому я фальсифицирую результат вызова ,
class MyTest(unittest2.Test):
def setUp(self):
patcher = mock.patch('soc.product.views.API')
patch = patcher.start()
self.order_id = 'fake_order_id'
# The `API` class has methods that are dynamically created.
# The method `API.CreateOrder` needs to be patched to return `self.order_id`
# When testing that a resulting method is called, I get a failed assertion:
#AssertionError: Expected call: email_invoice(<User: User(id=46, merchant_id=503579)>, 'fake123123123')
#Actual call: email_invoice(<User: User(id=46, merchant_id=503575)>, <MagicMock name='API().CreateOrder().OrderID' id='140700602174736'>)
# soc.product.views.API.CreateOrder => self.order_id
CreateOrderResult = mock.NonCallableMock()
CreateOrderResult.OrderId = self.order_id
patch.CreateOrder = mock.Mock()
patch.CreateOrder.return_value = CreateOrderResult
def test_that_stuff_out_homie(self):
... doing stuff ...
user = ... a result of doing stuff ...
self.patches['email_invoice'].assert_called_once_with(user, self.order_id)
Как говорится, утверждение не так:
AssertionError: Expected call: email_invoice(<User: User(id=46, merchant_id=503579)>, 'fake123123123')
Actual call: email_invoice(<User: User(id=46, merchant_id=503575)>, <MagicMock name='API().CreateOrder().OrderID' id='140700602174736'>)
Итак, что такое правильный/правильный способ проверить это?
Вы присваиваете 'self.order_id'' OrderId', но получаете идентификатор API от 'OrderID' (обратите внимание на верхний регистр в конце строки) –
Добавьте это как ответ, и я могу принять ... –