Использование Mock в python для DynamoDB и Table - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу протестировать свою функцию python, работа которой заключается в извлечении всех данных из таблицы DynamoDB

import boto3
import json
import constant as const
def connection():
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('file')
    response = table.scan()['Items']
    return response

И я тестирую свой код выше с помощью модульного теста. Код, который я написал, приведен ниже

import unittest
from unittest import mock
import retrive
import constant
import boto3
class Test(unittest.TestCase):
    @mock.patch('boto3.resource')
    @mock.patch('boto3.resource.Table')
    @mock.patch('table.scan')
    def test_fetch_db_data(self, mock_boto3,mock_dynamo,mock_table):
        mock_boto3.return_value()
        mock_dynamo.return_value()
        mock_table = {'Items':'key'}
        result = retrive.connection()
        self.assertEqual('key', result)

, но это дает мне ошибку, т.е. ModuleNotFoundError: нет модуля с именем 'table'

1 Ответ

0 голосов
/ 22 апреля 2020

Взгляните на этот ответ: Как смоделировать AWS Сервис DynamoDB? .

Можно также делать то, что вы пытаетесь сделать, но это будет выглядеть примерно так:

@mock.patch('botocore.client.BaseClient._make_api_call', new=mock_function)

Это более сложный способ, чем moto, поскольку вам нужно определить mock_function, который будет генерировать поддельные клиентские ответы.

...