首页 > 解决方案 > 在 python 中为 DynamoDB 和表使用 Mock

问题描述

我想测试我的 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: No module named 'table'

标签: pythonamazon-web-servicesmocking

解决方案


看看这个答案:如何模拟 AWS DynamoDB 服务?.

也可以做你尝试做的事情,但它看起来像:

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

这是一种更复杂的做事方式,moto因为您需要定义mock_function将生成模拟客户端响应的方式。


推荐阅读