首页 > 解决方案 > Django中的短信/文本后端

问题描述

我想创建一个用于发送的后端,SMS/Text就像EmailBackEnd我可以很好地完成发送短信的任务一样,但问题在于测试。

我可以测试在测试期间发送了多少电子邮件,使用django.core.mail.outbox我想为 SMS 做类似的事情说sms.smsoutbox,那么我将如何为 Django 编写类似的东西。

我知道email outbox在单个测试期间驻留在本地内存中,所以我可能要问的是,您如何在测试期间将某些内容放入本地内存中。

已经谢谢了。

标签: djangodjango-testing

解决方案


我认为 good 'olmock将是您最好的选择,假设您使用的是一些众所周知的良好 SMS API,例如 AWS SNS。借用这篇 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)已经过测试并且可以正常工作,并且您只是在测试您的代码是否正确调用它。

您可以构建更多的机器来重新实现django.core.mail.outboxfor SMS,但这可能不是必需的。


推荐阅读