【发布时间】:2019-07-26 21:30:25
【问题描述】:
我想测试一些错误处理逻辑,所以我想在我的单元测试中模拟一个特定的异常类型。我正在模拟对 boto3 的调用,但我想通过模拟来引发 ParameterNotFound 异常。我正在测试的代码follows this pattern:
boto3_client = boto3.client('ssm')
try:
temp_var = boto3_client.get_parameter(Name="Something not found")['Parameter']['Value']
except boto3_client.exceptions.ParameterNotFound:
... [logic I want to test]
我创建了一个 unittest 模拟,但我不知道如何使它引发异常作为这个 ParameterNotFound 异常。我尝试了以下方法,但它不起作用,因为在评估 except 子句时它得到“异常必须从基类派生”:
@patch('patching_config.boto3.client')
def test_sample(self, mock_boto3_client):
mock_boto3_client.return_value = mock_boto3_client
def get_parameter_side_effect(**kwargs):
raise boto3.client.exceptions.ParameterNotFound()
mock_boto3_client.get_parameter.side_effect = get_parameter_side_effect
如何在单元测试中模拟 ParameterNotFound boto3 异常?
【问题讨论】:
-
这看起来和我回答你的最后一个问题一样。没错,它是
side_effect,但您需要另一个由client()函数返回的模拟对象。 -
这条线不是这样吗? mock_boto3_client.return_value = mock_boto3_client
-
对不起,我错过了。我会看看你的例子发生了什么
-
我测试了您的示例,除了 boto3 不提供
ParameterNotFound异常这一事实之外,该示例还有效。此示例中是否缺少更多内容? -
我收到了
exceptions must derive from BaseException,但我可以看到 side_effect 正在工作,因为我添加了一个 print 语句。
标签: python unit-testing boto3 python-unittest