簡體   English   中英

即使類已實例化,assert_called() 也會引發異常

[英]assert_called() raising exception even though class was instantiated

使用此答案作為模型,我正在測試以下實例化類 ( 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)的實例化返回后立即<django.core.mail.message.EmailMultiAlternatives object at 0x7fbf4bb4b590>

即使正在實例化EmailMultiAlternatives也可能導致斷言失敗的EmailMultiAlternatives是什么?

由於admintools.emailer導入EmailMultiAlternatives ,您需要模擬admintools.email.EmailMultiAlternatives

@patch('admintools.emailer.EmailMultiAlternatives')
def test_send_email(self, mockEmailMultiAlternatives):

send_email通過模塊全局名稱調用該函數,而不是通過django.core.mail屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM