#django #unit-testing #amazon-sns #boto3
#django #модульное тестирование #amazon-sns #boto3
Вопрос:
Я пытаюсь модульно протестировать функцию:
@shared_task()
def push_notification(message=None, message_type=None, user_id=None, data={}):
# Get the aws arn from token table
aws_token_data = AwsDeviceToken.objects.filter(user_id=user_id).latest("id")
client = boto3.client('sns', **aws.AWS_CREDENTIAL)
message = {
'default': message,
more stuff here
'data': data})
}
message = json.dumps(message, ensure_ascii=False)
response = client.publish(
TargetArn=str(aws_token_data.aws_PLATFORM_endpoint_arn),
Message=message,
MessageStructure='json',
MessageAttributes={}
)
return response
Когда пользователи регистрируются в нашем сервисе, они получают arn темы в зависимости от типа их устройства.
Я пытался:
def test_push_notification(self):
with mock.patch('boto3.client') as mock_client:
data = {'Some data': "to be sent"}
push_notification(
message="your invitation has been accepted",
message_type='b2g_accepted',
user=self.user,
data=data
)
self.assertEqual(mock_client.call_count, 1)
Где self.user — это пользователь, зарегистрированный в методе настройки TestCase. Это не удается, call_count равен 0
Я ломаю голову, пытаясь найти способ протестировать эту функцию, но в основном придумываю сторонние модули или примеры для S3.
Приветствуется любая помощь
Ответ №1:
Вам нужно смоделировать, куда он импортирован (если это не метод класса)
Итак, если ваша функция push_notification находится в модуле с именем my_module, вы должны написать:
With mock.patch('my_module.boto3.client') as mock_client
Комментарии:
1. Как имитировать фактический
publish
?