强制处理异常

问题描述

我想抛出一个异常,以便完成几行的覆盖范围。

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