简体   繁体   English

在 python 中为 DynamoDB 和表使用 Mock

[英]Using Mock in python for DynamoDB and Table

I want to test my python function which work is to extract all the data from the dynamoDB table我想测试我的 python function 的工作是从 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

And I am testing my above code using unit test.我正在使用单元测试测试我的上述代码。 The code that I have written is given below我写的代码如下

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)

but this give me an error ie ModuleNotFoundError: No module named 'table'但这给了我一个错误,即 ModuleNotFoundError: No module named 'table'

Take a look at this answer: How to mock AWS DynamoDB service?看看这个答案: 如何模拟 AWS DynamoDB 服务? . .

It's also possible to do what you try to do, but it will look something like:也可以做你尝试做的事情,但它看起来像:

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

It is a more complicated way to do things than moto since you need to define mock_function which will generate mocked client responses.这是一种比moto更复杂的做事方式,因为您需要定义mock_function来生成模拟客户端响应。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM