Я пытаюсь проверить мой код, который отправляет электронные письма.Примерно так выглядит мой модульный тест:
class EmailTest(TestCase):
def test_send_email(self):
my_send_mail_method()
self.assertEqual(len(mail.outbox), 1)
Этот код работает отлично, если my_send_mail_method отправляет электронную почту в той же теме.Однако, когда я изменяю код таким образом, что my_send_mail_method будет отправлять почту из другого потока, значение len(mail.outbox)
равно 0. my_send_mail_method
ожидает окончания отправки письма, поэтому я не думаю, что это проблема параллелизма.
РЕДАКТИРОВАТЬ
Код, который отправляет электронные письма, выглядит так, будто он запускается в том же потоке:
import timeout_decorator
from django.core import mail
from django.test import TestCase
@timeout_decorator.timeout(120, use_signals=False)
def test_send_email():
mail.send_mail('Subject here', 'Here is the message.',
'from@example.com', ['to@example.com'],
fail_silently=False)
Дело в том, что мой метод имеет timeout_decorator (в методе происходит больше вещей, которые могут повредить обработку, и я просто хотел через некоторое время убить процесс).
Я проверил код декоратора и насколько я могу сказать,создает новый поток, выполняет его, ждет ответа и возвращает его.Однако я не очень хорошо разбираюсь в Python и, возможно, здесь упустил что-то очевидное.