0

我想抛出一个异常,这样我就可以完成几行的覆盖。

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

有任何想法吗?

4

1 回答 1

0

原来我在想这个错误的方式。我通过在测试执行之前没有创建表来强制出错,所以我不能“查询”一个不存在的表。现在我可以检查我的结果是否为无。

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
于 2020-11-02T20:41:58.273 回答