pytest - Moto 测试没有引发适当的异常
问题描述
我有以下要测试的功能:
def download(self):
s3 = boto3.client('s3')
try:
with open(self.flow_cells +'.tar', 'wb') as data:
s3.download_fileobj(
self.source_s3_bucket,
self.source_key,
data
)
return True
except botocore.exceptions.ClientError as error:
print(error.response['Error']['Code'])
我正在使用 pytest 来测试带有 moto 的代码。除了这个之外,所有其他测试和 botocore 异常都会被标记。我在标准中捕获它正在获取异常函数并打印正确的代码,但 moto 没有将其标记为异常
这是我的测试代码。
def test_download(parse_args, file_test):
with moto.mock_s3():
s3 = boto3.resource('s3')
s3.create_bucket(Bucket=parse_args.glacier_s3_bucket, CreateBucketConfiguration={
'LocationConstraint': 'us-east-1'
})
s3.create_bucket(Bucket=parse_args.output_s3_bucket, CreateBucketConfiguration={
'LocationConstraint': 'us-east-1'
})
bucket_version = s3.BucketVersioning(parse_args.glacier_s3_bucket)
bucket_version.enable()
s3.Object(parse_args.glacier_s3_bucket, 'flowcells/flowcell-testing.tar').put\
(Body=open(file_test, 'rb'))
glacier_client = GlacierRestoreClient(parse_args)
assert glacier_client.download() is True
s3.Object(glacier_client.source_s3_bucket, glacier_client.source_key).delete()
with pytest.raises(Exception) as error:
glacier_client.download()
assert 'Error' in error
解决方案
在except
子句内部,异常被沉默而不传播,所以你需要重新提出它:
except botocore.exceptions.ClientError as error:
print(error.response['Error']['Code'])
raise
Bareraise
重新引发刚刚捕获的异常。
PS。无耻插件:我是20年前要求Guido添加bare的人之一raise
!:-)
推荐阅读
- sql - Oracle 代理访问
- react-native-android - 链接网址未清除
- javascript - 状态更新未有效反映在浏览器窗口上 - 反应状态更新问题
- mpeg-dash - 具有非零重复计数的分段列表的 Dash 播放器
- authentication - 接入设备(三层交换机)不支持portal协议如何实现portal认证
- oracle - Crystal Reports - 如果页面没有记录,则禁止页面标题
- python - 将数据存储在数组中并将其限制为相似值python的数量
- javascript - 使用 for 循环递归搜索对象的父数组
- python - 如何让我的程序在 if 语句后继续
- xaml - 条目和按钮不集中在 xamarin 表单中