Python 摩托没有';模拟发电机

Python 摩托没有';模拟发电机,python,aws-lambda,boto3,moto,Python,Aws Lambda,Boto3,Moto,我正试图为与DynamoDB通信的Lambda函数编写单元测试。我使用的是moto,但它并没有嘲弄任何东西。每当我在boto3中调用某个东西时,它都会使用AWS CLI配置文件与实际API进行通信,而不是模拟API。为什么会这样 代码如下: visitorCounterLambda函数的单元测试 来自visitorCounterLambda导入处理程序 进口boto3 来自moto进口模拟发电机2 def设置(自): #通过 self.region='us-east-2' @模拟发电机2 def

我正试图为与DynamoDB通信的Lambda函数编写单元测试。我使用的是
moto
,但它并没有嘲弄任何东西。每当我在boto3中调用某个东西时,它都会使用AWS CLI配置文件与实际API进行通信,而不是模拟API。为什么会这样

代码如下:

visitorCounterLambda函数的单元测试 来自visitorCounterLambda导入处理程序 进口boto3 来自moto进口模拟发电机2 def设置(自): #通过 self.region='us-east-2' @模拟发电机2 def test_handler(): dynamodb=boto3.client('dynamodb') ddbTableName=“myDDBtable” #table=dynamodb.create_table( #TableName=ddbTableName, #BillingMode='PAY_PER_REQUEST', #属性定义=[ # { #'AttributeName':'id', #“AttributeType”:“S” # }, # ], #凯西马=[ # { #'AttributeName':'id', #“键类型”:“哈希” # }, # ] # ) tablesListed=dynamodb.list_tables() 打印(列表) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 测试处理器()
print(表列表)
从我的实际帐户返回我的实际表。如果我取消注释
create\u table
命令,它也会在我的AWS帐户中创建表

我错过了什么?
谢谢

我发现问题出在visitorCounterLambda导入处理程序的
部分,因为该脚本在导入时已经建立了boto3客户端,因此
mock
无法打破这一点。正确的操作方法在“非常重要--推荐用法”下进行了概述。您应该首先建立
@mock_dynamodb2
,然后
将外部资源导入函数

例如:

导入boto3
来自moto进口模拟发电机2
@模拟发电机2
def test_handler():
来自visitorCounterLambda导入处理程序
dynamodb=boto3.client('dynamodb')
##在这里施展你的魔法
tablesListed=dynamodb.list_tables()
打印(列表)

我刚刚试用了你的代码,它在这里工作得非常好。您使用的Python和
boto3
moto
版本是什么?我使用的是
python3.7.3
boto3 1.13.24
moto 1.3.14
。可能是因为我有预配置的CLI凭据吗?@Dunedan谢谢你的帮助,我找到了答案,请查看下面的答案。我必须提到,我的帖子是由两个不同的人编辑的,目的是“代码清理”,他们删除了问题所在的部分。代码管理处于最佳状态。。。