python - 在 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'
解决方案
看看这个答案:如何模拟 AWS DynamoDB 服务?.
也可以做你尝试做的事情,但它看起来像:
@mock.patch('botocore.client.BaseClient._make_api_call', new=mock_function)
这是一种更复杂的做事方式,moto
因为您需要定义mock_function
将生成模拟客户端响应的方式。
推荐阅读
- arrays - 全局二维数组值在模块之间变化
- sql - Teradata SQL - 拆分字符串,字符串具有列名和值
- java - Jetty 11 - 仅当文件是视频时上传失败
- c# - 成功登录本地应用程序后,如何从网站的登录页面获取访问令牌
- r - 地图上ggplot2中的地图密度
- graphql - Graphql Ariadne table_aggregate 未记录
- tensorflow - RandomWith 如何产生类似 ValueError 的错误:应定义“密集”输入的最后一个维度。找到`无`
- python - 熊猫循环问题
- python - “numpy”没有属性“dtype”(很可能是由于循环导入)
- python - Scrapy/BeautifulSoup 模拟“单击”按钮以加载网站的一部分