Django Test框架,带有基于文件的电子邮件后端服务器

时间:2012-12-12 21:26:31

标签: python django unit-testing automated-tests functional-testing

我在Django框架中制定了测试用例。

用例: 我使用的API通过向用户发送电子邮件来注册用户,当他们点击电子邮件中提供的链接时,他们的帐户就会被激活。

在我的settings.py中,我正在使用

EMAIL_FILE_PATH  ='django.core.mail.backends.filebased.EmailBackend'

指向本地目录。

从eclipse运行PyUnit测试用例时,所有工作文件。为每个发送的电子邮件生成文本文件

但是,当我使用时

python ./manage.py test <component_name>

文件无法生成。

有什么见解我使用./manage.py执行测试用例和使用pyUnit时有什么区别?

2 个答案:

答案 0 :(得分:30)

如果您想使用特定的电子邮件后端,可以在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

答案 1 :(得分:7)

简单的答案:

如果不设计自己的电子邮件系统,就无法做到这一点,但这可能很愚蠢。我建议做其他事情来验证代码是否成功,而不需要发送电子邮件。比如,运行代码,假设用户单击链接并创建RequestFactory来获取/发布链接以运行与之关联的视图代码。

来自Django Testing Application

  

电子邮件服务

"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."