Python 带有基于文件的电子邮件后端服务器的Django测试框架
我已经在Django框架中制定了测试用例 用例: 我使用的API通过向用户发送电子邮件注册用户,当他们单击电子邮件中提供的链接时,他们的帐户被激活 在my settings.py中,我正在使用Python 带有基于文件的电子邮件后端服务器的Django测试框架,python,django,unit-testing,automated-tests,functional-testing,Python,Django,Unit Testing,Automated Tests,Functional Testing,我已经在Django框架中制定了测试用例 用例: 我使用的API通过向用户发送电子邮件注册用户,当他们单击电子邮件中提供的链接时,他们的帐户被激活 在my settings.py中,我正在使用 EMAIL_FILE_PATH ='django.core.mail.backends.filebased.EmailBackend' 它指向本地目录 当从eclipse运行PyUnit测试用例时,所有东西都可以工作。为每个发送的电子邮件生成文本文件 但是,当我使用 python ./manage.p
EMAIL_FILE_PATH ='django.core.mail.backends.filebased.EmailBackend'
它指向本地目录
当从eclipse运行PyUnit测试用例时,所有东西都可以工作。为每个发送的电子邮件生成文本文件
但是,当我使用
python ./manage.py test <component_name>
python./manage.py测试
这些文件不会生成
任何洞察当我使用/manage.py
执行测试用例和使用pyUnit
时有什么区别 简单的答案是:
如果不设计自己的电子邮件系统,你就无法做到这一点,但那可能是愚蠢的。我建议做一些其他事情来验证代码是否成功,而不需要发送电子邮件。例如,运行代码,假设用户单击链接并创建RequestFactory以获取/发布链接以运行与其关联的视图代码
从:
电子邮件服务
"If any of your Django views send email using Django's email functionality,
you probably don't want to send email each time you run a test using that
view. For this reason, Django's test runner automatically redirects all
Django-sent email to a dummy outbox. This lets you test every aspect of
sending email -- from the number of messages sent to the contents of each
message -- without actually sending the messages."
如果您想使用特定的电子邮件后端,可以在Django中覆盖此特性 在django.test.utils中,当django设置测试环境时,django将如django测试文档中所述,将电子邮件后端更改为locmem:
def setup_test_environment():
...
mail.original_email_backend = settings.EMAIL_BACKEND
settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
因此,如果要启用发送测试电子邮件,只需将设置更改为所需设置
from django.test.utils import override_settings
@override_settings(EMAIL_BACKEND='django.core.mail.backends.filebased.EmailBackend')
class MyTest(TestCase):
# your test case
使用manage.py test时,所有电子邮件功能都会重定向到虚拟发件箱,这意味着无论settings.py中的电子邮件后端设置是什么,都无法完成任何操作。他们假设您在测试时不想在真实环境中发送真实的电子邮件或创建文件。