我目前正在尝试使用Moto&;为我的python代码编写单元测试@模拟发电机2。到目前为止,我一直在努力测试我的“成功操作”测试用例。但我很难让它为我的“失败案例”工作
在我的测试代码中,我有:
@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的行为,包括用户提供错误输入时的行为。换句话说,调用put_item()如果对AWS失败,那么对Moto也会失败
没有内置方法强制对有效输入进行错误响应
很难从您的示例中看出这是如何强制的,但似乎值得使用这一行来创建无效输入:
ddb_item = <do stuff with some_value to create sanitized item>
相关问题 更多 >
编程相关推荐