Django中的SMS /文本后端

时间:2019-03-13 04:25:32

标签: django django-testing

我想创建一个像SMS/Text那样发送EmailBackEnd的后端,我可以很好地完成发送SMS的任务,但是麻烦在于测试。

我可以使用django.core.mail.outbox测试在测试过程中发送了多少电子邮件。我想对短信sms.smsoutbox做类似的事情,那么我该如何为Django写类似的东西。

我了解到email outbox在单个测试期间一直驻留在本地内存中,所以我可能要问的是,您如何在测试期间将某些东西放入本地内存中。

已经感谢。

1 个答案:

答案 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,但这可能不是必需的。