模拟 boto3 批量写入,用于 python 中的单元测试

Pra*_*esh 5 python unit-testing mocking boto3

我想使用单元测试来测试batch_write方法。

class DataService:
    def __init__(self, table):
        dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
        self.db = dynamodb.Table(self.table)


    def batch_write(self, items):
        with self.db.batch_writer() as batch:
            for item in items:
                batch.put_item(Item=item)
Run Code Online (Sandbox Code Playgroud)

我想模拟batch_writer()。我已经看到使用 mock_open 来模拟文件打开方法。但我真的不明白我可以模拟这个流式batch_writer() 调用吗?

Cod*_*110 6

我也遇到了这个问题,这就是我解决它的方法。

    from mock import MagicMock
    class TestClass():
        def __enter__(self, *args):
            return self
        def __exit__(self, *args):
            pass

    cls = TestClass()
    cls.put_item = MagicMock()

    repository.table.batch_writer = MagicMock()
    repository.table.batch_writer.return_value = cls

    print cls.put_item.call_args_list
Run Code Online (Sandbox Code Playgroud)

现在我可以通过我的模拟测试类代替batch_writer来模拟调用或检查参数。我知道这是一个老问题,但我一直在努力解决这个问题,并希望有人能发布一个代码示例(如果这很容易做到)。如果有更好更简单的方法使用任何人都有的补丁,请发布。