相关疑难解决方法(0)

具有AttributeError和ValueError的Python PropertyMock副作用

我试图模拟一个类的属性(@property装饰器)并且碰到了这个不正确的行为:

 >>> from mock import MagicMock, PropertyMock
 >>> m = MagicMock()
 >>> type(m).p = PropertyMock(side_effect=AttributeError)
 >>> m.p
 <MagicMock name='mock.p' id='63150736'>
Run Code Online (Sandbox Code Playgroud)

正确的行为是这样的:

 >>> from mock import MagicMock, PropertyMock
 >>> m = MagicMock()
 >>> type(m).p = PropertyMock(side_effect=ValueError)
 >>> m.p
Traceback (most recent call last)
[...]
ValueError
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么设置一个不同的例外会给我不同的结果.两种情况下的预期结果都是应该提出异常!因此,In [4]行应该提高一个AttributeError.它不是.

有人关心开导我吗?

附录:我试图检查的属性做了一些巧妙的检查,看看传递的值是否合理.如果所述值不合理,则返回AttributeError,因为我理解这是Python中的正确异常.所以,我需要检查使用该属性的代码是否失败以及成功.因此,使用MagicMock来模拟属性并引发异常.一个简单的例子是:

@x.setter
def x(self, value):
    if value < 0:
         raise AttributeError("Value cannot be negative!")
    self._x = value
Run Code Online (Sandbox Code Playgroud)

python mocking

13
推荐指数
1
解决办法
2479
查看次数

标签 统计

mocking ×1

python ×1