与AWS有关,但不确定这有多重要。我正在尝试编写一个单元测试来执行这个函数中的except
块(在这个类中):
class LambdaModifyVpcSecurityGroups(ModifyVpcSecurityGroupsAction):
permissions = ("lambda:UpdateFunctionConfiguration",)
def process(self, functions):
client = local_session(self.manager.session_factory).client('lambda')
groups = super(LambdaModifyVpcSecurityGroups, self).get_groups(
functions)
for idx, i in enumerate(functions):
try:
client.update_function_configuration(FunctionName=i['FunctionName'],
VpcConfig={'SecurityGroupIds': groups[idx]})
except ClientError as e:
if e.response['Error']['Code'] == "ResourceNotFoundException":
continue
raise
我试着用一个mock对象来做,比如:
class TestModifyVpcSecurityGroupsAction(BaseTest):
def test_lambda_notfound_exception(self):
with patch("c7n.resources.awslambda.local_session") as mock_local_session:
mock_local_session.return_value.client.return_value.update_function_configuration.side_effect = ClientError
with self.assertRaises(ClientError):
groups = ['sg-12121212', 'sg-34343434']
mock_local_session.client.update_function_configuration(
FunctionName='badname', VpcConfig={'SecurityGroupIds': groups})
mock_local_session.client.update_function_configuration.assert_called_once()
传递给的参数client.update\函数\配置是设计用来触发所需的ClientError的,但是如果我正确地使用了副作用,那就不重要了,对吧?你知道吗
正如您可能知道的,我对使用mock库和测试异常还比较陌生。我已经阅读了尽可能多的例子,并试图以此作为我的评价标准:https://realpython.com/python-mock-library/#patch
但我已经被困了好几天了。如何调用process
函数,并以触发我试图设置的副作用ClientError的方式调用?到目前为止(我想)最接近的方法是通过类直接调用它,比如:
LambdaModifyVpcSecurityGroups.process(self,functions)
然后函数运行,但在第一行失败,出现以下错误:
AttributeError: 'TestModifyVpcSecurityGroupsAction' object has no attribute 'manager'
我需要手动设置manager属性吗?我也试过这么做,但没有得到更好的结果,但可能做错了。你知道吗
谢谢你的帮助,抱歉邮件太长。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐