我想创建一个像SMS/Text
那样发送EmailBackEnd
的后端,我可以很好地完成发送SMS的任务,但是麻烦在于测试。
我可以使用django.core.mail.outbox
测试在测试过程中发送了多少电子邮件。我想对短信sms.smsoutbox
做类似的事情,那么我该如何为Django写类似的东西。
我了解到email outbox
在单个测试期间一直驻留在本地内存中,所以我可能要问的是,您如何在测试期间将某些东西放入本地内存中。
已经感谢。
答案 0 :(得分:0)
我认为,如果您使用的是诸如AWS SNS之类的知名SMS API,那么'ol mock
是您最好的选择。从this SO post借用,假设您的电子邮件功能如下所示:
import boto3
def send_sms(number, message):
sns = boto3.client('sns')
sns.publish(PhoneNumber=number, Message=message)
您的测试用例可能看起来像这样
from django.test import TestCase, mock
from src import send_sms
class SendSMSTestCase(TestCase)
@mock.patch('boto3.client')
def test_send_sms(self, mock_client):
mock_publish = self.mock_client.return_value.publish
send_sms('+18005551212', 'Hello there!')
mock_publish.assert_called_once_with(
PhoneNumber='+18005551212',
Message='Hello there!'
)
您相信SMS API调用(在本例中为通过Boto的SNS)已经过测试并且可以正常工作,而您只是在测试代码是否正确调用了它。
您可以构建更多的机制来重新实现SMS的django.core.mail.outbox
,但这可能不是必需的。