python - 即使类被实例化,assert_call() 也会引发异常
问题描述
使用这个答案作为模型,我正在测试以下实例化类(EmailMultiAlternatives
)的方法:
管理工具/emailer.py
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
def send_email(template_path, context, subject_line, from_email, to=[], cc=[], bcc=DEFAULT_BCC_EMAILS):
msg_html = render_to_string(template_path, context)
msg_plain = strip_tags(msg_html)
email = EmailMultiAlternatives(subject_line, msg_plain, from_email, to, cc=cc, bcc=bcc)
email.attach_alternative(msg_html, "text/html")
email.send()
使用test.py:
from unittest.mock import patch
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.test import TestCase
from admintools.emailer import send_email
class EmailerTestCase(TestCase):
@patch('django.core.mail.EmailMultiAlternatives')
def test_send_email(self, mockEmailMultiAlternatives):
context = {}
template_path = "emails/closings/seller_pre_close_update_prompt.html"
msg_plain = render_to_string(template_path, context)
to = ['']
cc = ['']
send_email(template_path, {}, 'subject', "from", to, cc=cc)
mockEmailMultiAlternatives.assert_called()
我收到AssertionError: Expected 'EmailMultiAlternatives' to have been called.
即使email
在测试运行期间成功创建(print(email)
在实例化返回后立即通过 a 验证<django.core.mail.message.EmailMultiAlternatives object at 0x7fbf4bb4b590>
)。
即使EmailMultiAlternatives
正在实例化,什么可能导致断言失败?
解决方案
由于如何admintools.emailer
导入EmailMultiAlternatives
,您需要模拟admintools.email.EmailMultiAlternatives
。
@patch('admintools.emailer.EmailMultiAlternatives')
def test_send_email(self, mockEmailMultiAlternatives):
send_email
通过模块全局名称调用函数,而不是通过django.core.mail
属性。
推荐阅读
- node.js - 如何在 NestJs 中使用 Fastify 忽略特定的路由日志记录?
- python - 随着用户选择和训练数据而改进的线性回归模型
- sql - 从链接中提取数据并将其放置在新列中
- ballerina - Ballerina V 1.0 - 将数据库连接保存在单独的文件中
- laravel - 如何在 Laravel 5.8 的 owl carousal 滑块中显示我的数据库图像?
- elasticsearch - 使用 Elastic Stack 基本订阅的 OEM
- python - Python requests: Passing multiple client certificates to session.cert
- amazon-redshift - SQLWorkbenchJ 和 Redshift 永远执行这个查询
- android - 启动画面在 android 上的 react-native 应用程序中不起作用
- javascript - 计算无处不在。需要数学奇才