django - Django中的短信/文本后端
问题描述
我想创建一个用于发送的后端,SMS/Text
就像EmailBackEnd
我可以很好地完成发送短信的任务一样,但问题在于测试。
我可以测试在测试期间发送了多少电子邮件,使用django.core.mail.outbox
我想为 SMS 做类似的事情说sms.smsoutbox
,那么我将如何为 Django 编写类似的东西。
我知道email outbox
在单个测试期间驻留在本地内存中,所以我可能要问的是,您如何在测试期间将某些内容放入本地内存中。
已经谢谢了。
解决方案
我认为 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.outbox
for SMS,但这可能不是必需的。
推荐阅读
- matlab - 计算范围广泛的标量值的矩阵乘积
- pdf - 我可以使用ghostscript将pdf转换为小尺寸pdf而不会丢失确切的颜色配置文件吗
- powershell - 找不到与参数名称“TokenKind”匹配的参数
- javascript - 为什么即使我已将 resave 和 saveUninitialized 设置为 false,express-sessions 仍会创建 connect.sid cookie?
- android - 如何在 ViewModel 中获取上下文
- python - 使用 fsolve 检查微分方程的稳定性
- video-streaming - [Gstreamer:从元素“pipeline0”获得EOS]
- java - java.lang.ClassCastException:从 Firebase 检索数据时,java.lang.Double 无法转换为 java.lang.Long
- javascript - 如何将以下字符串转换为 json 对象?
- android - 在 SecondActivity 完成后不调用 onActivityResult()