gpt4 book ai didi

python - 你如何将异常参数传递给 python unittest 模拟副作用?

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:46 25 4
gpt4 key购买 nike

如何将需要参数的异常作为模拟副作用传递?

我正在尝试测试 boto.exception.EC2ResponsError 的 assertRaises,但在 _mock_call 中得到“TypeError:init() takes at least 3 arguments (1 given)”。

@mock_ec2
@patch.object(Ec2Region, 'connect')
def test_ec2_get_raises(self, mock_connect):
conn = boto.connect_ec2()
mock_connect.return_value = conn
reservation = conn.run_instances('ami-1234abcd')
instance = reservation.instances[0]
Ec2Instance.objects.create(region=self.region, account=self.account,
instance_id=instance.id)
mock_connect.side_effect = boto.exception.EC2ResponseError
self.assertRaises(
boto.exception.EC2ResponseError,
Ec2Instance.ec2_get, self.account, self.region)

我得到的错误是这样的:

======================================================================
ERROR: test_ec2_get_raises (session_ec2.tests.test_instance.Ec2InstanceTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/bschott/.virtualenvs/session-ec2/lib/python2.7/site-packages/moto/core/models.py", line 70, in wrapper
result = func(*args, **kwargs)
File "/Users/bschott/.virtualenvs/session-ec2/lib/python2.7/site-packages/mock.py", line 1201, in patched
return func(*args, **keywargs)
File "/Users/bschott/Source/session-ec2/session_ec2/tests/test_instance.py", line 84, in test_ec2_get_raises
Ec2Instance.ec2_get, self.account, self.region)
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 475, in assertRaises
callableObj(*args, **kwargs)
File "/Users/bschott/Source/session-ec2/session_ec2/models/instance.py", line 110, in ec2_get
connection = region.connect(account)
File "/Users/bschott/.virtualenvs/session-ec2/lib/python2.7/site-packages/mock.py", line 955, in __call__
return _mock_self._mock_call(*args, **kwargs)
File "/Users/bschott/.virtualenvs/session-ec2/lib/python2.7/site-packages/mock.py", line 1010, in _mock_call
raise effect
TypeError: __init__() takes at least 3 arguments (1 given)

最佳答案

Calling 中所述部分您可以在 side_effect 初始化中同时使用实例或类。此外,您可以使用引发所需异常的可调用对象。

当类用于定义 side_effect 并且所需的异常没有普通的空构造函数时,您将得到一个与您拥有的异常相同的异常,因为 mock 框架没有知道如何构建该异常。

在你的情况下你可以使用类似的东西

mock_connect.side_effect = boto.exception.EC2ResponseError(400, "My reason", "my body")

关于python - 你如何将异常参数传递给 python unittest 模拟副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30677100/

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