Я думаю, что хорошим 'ol mock
будет ваш лучший выбор, если вы используете какой-то известный API-интерфейс SMS, такой как AWS SNS. Заимствуя из этого SO сообщения , давайте предположим, что ваша функция электронной почты выглядит следующим образом
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!'
)
Вы верите, что вызов API SMS (в данном случае SNS через Boto) протестирован и будет работать, и вы просто проверяете, что ваш код вызывает его правильно.
Вы могли бы создать больше машин для повторной реализации django.core.mail.outbox
для SMS, но, вероятно, в этом нет необходимости.