【问题标题】:How to test for the second parameter of a mocked method?如何测试模拟方法的第二个参数?
【发布时间】:2014-10-27 16:54:18
【问题描述】:

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

【问题讨论】:

    标签: python unit-testing python-mock


    【解决方案1】:

    你在描述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 方法是它自己的断言。

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 2013-04-05
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      相关资源
      最近更新 更多