1

我正在尝试模拟该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,但我不关心这个测试用例的第一个参数。有没有办法说第一个参数接受任何东西?

4

1 回答 1

0

您正在描述的基本用法mock.ANY

有时您可能需要在调用 mock 时对某些参数进行断言但要么不关心某些参数,要么希望将它们单独拉出call_args并对它们进行更复杂的断言。

要忽略某些参数,您可以传入比较等于一切的对象。无论传入什么,调用都会assert_called_with()成功。assert_called_once_with()

因此,在您的情况下,您可以使用:

# only asserting on 'test_email_address' argument:
send_emails_mock.assert_called_with(mock.ANY, test_email_address="test@test.com")

请注意,您真的不想self.assertTrue在那条线上使用。mock 方法是它自己的断言。

于 2014-10-27T17:16:04.107 回答