use*_*661 8 python django unit-testing mocking
我正在使用Mock库嘲笑Django的send_mail函数:
from django.core.mail import send_mail
send_mail = Mock()
Run Code Online (Sandbox Code Playgroud)
当我想断言send_mail被调用时,我的问题出现了.我不能使用assert_called_with或相关的方法,因为他们期望参数,我不会完全知道/不想在测试环境中输入(它涉及模板).我只是想知道已经调用的方法.打印语句清楚地表明它被调用,但如果我尝试这样做:
self.assertEqual(send_mail.called, True)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,因为被调用的属性仍为False.如何在不必指定属性的情况下测试方法是否已被测试.
你还没有send_mail正确地模仿这个方法.您只能在自己的模块中反弹名称,而不是其他任何地方.
这将是一个正确的重新绑定:
from django.core import mail
mail.send_mail = Mock()
Run Code Online (Sandbox Code Playgroud)
但是使用patch()上下文管理器/装饰器更容易:
with patch('django.core.mail.send_mail') as mocked_send_mail:
# run your tests
self.assertTrue(mocked_send_mail.called)
Run Code Online (Sandbox Code Playgroud)