如何测试模拟方法的第二个参数?

时间:2014-10-27 16:54:18

标签: python unit-testing python-mock

我正在尝试模拟sendEmails()方法,并希望测试是否使用“test@test.com”电子邮件地址调用第二个参数。

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

我可以使用assert_called_with,但我不关心此测试用例的第一个参数。有没有办法说第一个参数接受任何东西?

1 个答案:

答案 0 :(得分: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)

并在该对象上构建断言。