问题描述
我想抛出一个异常,以便完成几行的覆盖范围。
def __query_items_from_db(self,my_id: str) -> list:
result = None
try:
result = self.table.query(
KeyConditionExpression='#id = :id',ExpressionAttributeValues={
':id': my_id
},ExpressionAttributeNames={
'#id': 'MY_ID'
}
)
except ClientError as e:
print('__query_items_from_db',e)
return result
此代码有效,不会出错,因为我还有其他代码可以设置表和种子数据。 这是我试图引发错误的方法:
@mock_dynamodb2
def test_should_handle_an_error():
db_resource = create_mock_table()
module = CoverageReport(db_resource)
with pytest.raises(ClientError) as e:
raise ClientError() <-- i don't think this is right
actual_result = module._CoverageReport__query_items_from_db(
1) <-- this should return None because the ClientError is fired
assert actual_result == None
有什么想法吗?
解决方法
原来,我在想这是错误的方式。我通过在测试执行之前不创建表来强制执行错误,因此我无法“查询”不存在的表。现在,我可以检查结果是否为无。
def test_should_handle_an_error():
db_resource = boto3.resource('dynamodb')
module = CoverageReport(db_resource)
actual_result = module._CoverageReport__query_items_from_db('testtesttest')
assert actual_result == None