2014-10-27 2 views
1

Я пытаюсь высмеять метод sendEmails() и хотел бы проверить, вызван ли второй параметр с адресом электронной почты «[email protected]».Как проверить второй параметр издевающегося метода?

@mock.patch('apps.dbank.management.commands.optin_invites.OptinBase.sendEmails') 
def test_x_send_emails(self, send_emails_mock): 
    oi = OptinInvitesX() 
    oi.compute(True, "[email protected]") 
    self.assertTrue(send_emails_mock.assert_called_with(???, test_email_address="[email protected]")) 

Я мог бы использовать assert_called_with, но я не забочусь о первом параметре для данного теста. Есть ли способ сказать что-либо принять для первого параметра?

ответ

0

Я не мог понять, как это сделать, когда я пытался сделать то же самое.

Вот несколько Hacky обходной путь:

from mock import MagicMock 

class YesMan(object): 
    def __eq__(self, other): 
     return True 

anything = YesMan() 

mock = MagicMock() 
mock(x=123, y=456) 
mock.assert_called_once_with(x=anything, y=456) 

Альтернативой смотреть на атрибуте

>>> mock.call_args 
call(y=456, x=123) 

И строить свои утверждения на этом объекте.

+0

См. Также 'mock.call_args_list' (list),' mock.call_count' (int) и 'mock.called' (bool) для более сложных случаев – wim

+0

Да, он работает как' self.assertEquals (args [0 ] [1] ['test_email_address'], "[email protected]") '. Это не очень. Я хотел, чтобы был лучший способ. Я оставляю вопрос на один день, если нет лучшего решения, я соглашусь с этим. Большое спасибо – Houman

Смежные вопросы