我试着模拟一个特定的boto3函数。我的模块,清理,进口boto3。Cleanup还有一个类“cleaner”。在初始化期间,cleaner创建一个ec2客户机:
self.ec2_client = boto3.client('ec2')
我想模拟ec2客户机方法:desribe_tags(),python说它是:
<bound method EC2.describe_tags of <botocore.client.EC2 object at 0x7fd98660add0>>
我得到的最远的结果是在我的测试文件中导入botocore并尝试:
mock.patch(Cleaner.botocore.client.EC2.describe_tags)
失败的原因是:
AttributeError: 'module' object has no attribute 'EC2'
我该如何嘲笑这种方法?
清理看起来像:
import boto3
class cleaner(object):
def __init__(self):
self.ec2_client = boto3.client('ec2')
ec2_客户端对象是具有desribe_tags()方法的对象。它是一个botocore.client.EC2对象,但我从不直接导入botocore。
你应该嘲笑你测试的地方。所以,如果您测试的是
cleaner
类(我建议您在这里使用PEP8标准,并使其成为Cleaner
),那么您需要模拟测试的位置。所以,你的补丁实际上应该是沿着以下几行的东西:我建议你通读一下mocking documentation,里面有很多例子可以做你想做的事情
当trying to mock a different method for the S3 client我找到了解决办法
希望有帮助:)
相关问题 更多 >
编程相关推荐