我有传统的Boto3代码,它大量使用默认的Boto3会话,例如。
import boto3
client = boto3.client('ec2')
client.describe_images(DryRun=False)
...
我希望使用placebo为此遗留代码编写单元测试。
然而,那里的文档似乎暗示被测代码需要始终明确地管理Boto3会话,即
import boto3
import placebo
session = boto3.Session()
pill = placebo.attach(session, data_path='/path/to/response/directory')
pill.record()
client = session.client('ec2')
client.describe_images(DryRun=False)
...
我对代码(e.g.)的阅读是这是对Placebo Mock框架的一个限制,尽管我不是Python程序员的专家。
我是否误解了一些基本的东西 - 有什么方法可以解决这个问题,还是我必须重构所有遗留代码以明确传递会话?
答案 0 :(得分:2)
安慰剂需要一个Session对象,所有示例都显示创建一个显式的Session对象,但我认为你可以引用“内置”Session对象。
import boto3
import placebo
pill = placebo.attach(boto3.session, data_path='/path/to/response/directory')
答案 1 :(得分:1)
我通过阅读Boto3单元测试(ref)来解决这个问题。
要将Placebo附加到默认会话,必须在调用Placebo之前显式设置默认会话:
import boto3
import placebo
boto3.setup_default_session()
session = boto3.DEFAULT_SESSION
pill = placebo.attach(session, data_path='/path/to/response/directory')
pill.record()
client = boto3.client('ec2')
client.describe_images(DryRun=False)
现在,只需添加这四行,我就可以在遗留代码中记录Boto3调用,而无需进一步重构。
我将提出拉动请求,以便在安慰剂自述文件中添加这些注释。