【问题标题】:Mock - testing if a method is called without specifying arguments模拟 - 测试是否在没有指定参数的情况下调用方法
【发布时间】:2014-02-11 10:59:12
【问题描述】:

我正在使用 Mock 库模拟 Django 的 send_mail 函数:

from django.core.mail import send_mail
send_mail = Mock()

当我想断言 send_mail 被调用时,我的问题就出现了。我不能使用 assert_call_with 或相关方法,因为它们需要参数,我不会完全知道/不想在测试环境中输入(它涉及模板)。我只想知道该方法已被调用。打印语句清楚地表明它被调用了,但是如果我尝试这个:

self.assertEqual(send_mail.called, True) 

我得到一个错误,因为被调用的属性仍然是 False。如何在无需指定属性的情况下测试方法是否已被调用。

【问题讨论】:

    标签: python django unit-testing mocking


    【解决方案1】:

    您没有正确模拟 send_mail 方法。您只能在自己的模块中重新绑定名称,而不是在其他任何地方。

    这将是一个正确的重新绑定:

    from django.core import mail
    mail.send_mail = Mock()
    

    但使用patch() context manager / decorator 更容易:

    with patch('django.core.mail.send_mail') as mocked_send_mail:
        # run your tests
        self.assertTrue(mocked_send_mail.called)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      相关资源
      最近更新 更多