gpt4 book ai didi

python - 如何使用 moto @mock_dynamodb2 模拟失败的操作?

转载 作者:行者123 更新时间:2023-12-04 13:24:13 26 4
gpt4 key购买 nike

我目前正在尝试使用 Moto 和 @mock_dynamodb2 为我的 python 代码编写单元测试。到目前为止,我一直在测试我的“成功操作”测试用例。但是我很难让它为我的“失败案例”工作。
在我的测试代码中,我有:

@mock_dynamodb2
class TestClassUnderTestExample(unittest.TestCase):
def setUp(self):
ddb = boto3.resource("dynamodb", "us-east-1")
self.table = ddb.create_table(<the table definition)
self.example_under_test = ClassUnderTestExample(ddb)

def test_some_thing_success(self):
expected_response = {<some value>}
assert expected_response = self.example_under_test.write_entry(<some value>)

def test_some_thing_success(self):
response = self.example_under_test.write_entry(<some value>)
# How to assert exception is thrown by forcing put item to fail?

TestClassUnderTestExample 看起来像这样:
class ClassUnderTestExample:
def __init__(self, ddb_resource=None):
if not ddb_resource:
ddb_resource = boto3.resource('dynamodb')
self.table = ddb_resource.Table(.....)

def write_entry(some_value)
ddb_item = <do stuff with some_value to create sanitized item>

response = self.table.put_item(
Item=ddb_item
)

if pydash.get(response, "ResponseMetadata.HTTPStatusCode") != 200:
raise SomeCustomErrorType("Unexpected response from DynamoDB when attempting to PutItem")

return ddb_item
在实际模拟 .put_item 操作以返回非成功值时,我完全陷入困境,以便我可以测试 ClassUnderTestExample 是否会按预期处理它并抛出自定义错误。我已经尝试过在运行测试之前删除表格之类的事情,但这只会在获取表格时引发异常,而不是执行带有错误代码的 PutItem。
我也试过为 pydash 或测试上方的表格打一个补丁,但我一定是做错了什么。我在 moto 的文档中找不到任何内容。任何帮助,将不胜感激!

最佳答案

Moto 的目标是完全模仿 AWS 的行为,包括当用户提供错误输入时的行为。换句话说,对 AWS 的 put_item() 调用失败,也会/应该对 Moto 失败。
没有内置方法可以强制对有效输入进行错误响应。
从您的示例中很难看出如何强制执行此操作,但看起来值得尝试使用此行来创建无效输入:ddb_item = <do stuff with some_value to create sanitized item>

关于python - 如何使用 moto @mock_dynamodb2 模拟失败的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69589263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com