django中的unittest内部函数

django中的unittest内部函数,django,unit-testing,Django,Unit Testing,我开始在django项目中使用unitest,并对测试process\u email()感兴趣。因为我正在测试电子邮件功能,所以我对测试parse_email()功能感兴趣。下面的代码是命令行管理功能(即我执行python manage.py进程\电子邮件) 如何在我的unittest中调用parse_email()? 由于此代码位于名为somemodel/management/commands/process\u email.py的文件中,因此只有process\u email()可见。随后,

我开始在django项目中使用unitest,并对测试
process\u email()
感兴趣。因为我正在测试电子邮件功能,所以我对测试
parse_email()
功能感兴趣。下面的代码是命令行管理功能(即我执行python manage.py进程\电子邮件)

如何在我的unittest中调用
parse_email()

由于此代码位于名为
somemodel/management/commands/process\u email.py
的文件中,因此只有
process\u email()
可见。随后,
call\u命令('parse\u email',mail.outbox[1].body,interactive=False)
将不起作用,因为只有
process\u email()
可见

def process_email():
    server = imaplib.IMAP4_SSL(settings.EMAIL_HOST,993)
    server.login(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD)
    server.select('INBOX')
    status, data = server.search(None, 'NOT', 'DELETED')

    if data:
        msgnums = data[0].split()

        for num in msgnums:
            status, data = server.fetch(num, '(RFC822)')
            valid = parse_email(data[0][1])
            print "valid is ", valid
            #            if not valid:
            server.store(num, '+FLAGS', '\\Deleted')

    server.expunge()
    server.close()
    server.logout()

def parse_email(message):
    # 'message' must be an RFC822 formatted message.
    pdb.set_trace()
    try:
        msg = message   
        message = email.message_from_string(msg)
        subject = message.get('subject', _('Created from e-mail'))
        subject = decode_mail_headers(decodeUnknown(message.get_charset(), subject))
        subject = subject.replace("Re: ", "").replace("Fw: ", "").replace("RE: ", "").replace("FW: ", "").strip()
下面是我说它不可见(可能是这个词的错误用法)的意思:当我在测试文件中调用
call\u命令('parse\u email')
时,我得到以下错误:

======================================================================
ERROR: test_submit_bldg (bldg.tests.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/bldg/tests.py", line 36, in test_submit_bldg
      print call_command('parse_email') 
  File "django/core/management/__init__.py", line 136, in call_command
  raise CommandError("Unknown command: %r" % name)
  CommandError: Unknown command: 'parse_email'

您可以直接从测试导入
parse_email

from somemodel.management.commands.process_email import parse_email
assert_equals(parse_email("..."), ...)

我不明白为什么您认为此代码“不可见”。当您运行测试时,测试实用程序的默认行为是在models.py和tests.py中查找所有测试用例(即unittest.TestCase的子类)。你的意思是说你的parse_email()是在models.py中定义的吗?更新了问题以使其更清楚-请参阅我调用call_命令(“parse_email”)时收到的错误消息。