Python:模拟对象属性的side_effect

Pic*_*els 17 python

是否可以对属性进行side_effect?如果我查看Mock文档,它似乎只能在对象方法上使用.

我正在尝试测试以下内容:

def get_object(self): 
    try:
        return self.request.user.shop
    except Shop.DoesNotExist:
        return None
Run Code Online (Sandbox Code Playgroud)

我希望Shop提出一个DoesNotExist异常.

猜猜也许我不够清楚,但我在谈论空洞模拟库.

http://www.voidspace.org.uk/python/mock/index.html

Dan*_*aro 18

值得注意的是,现在有了这个PropertyMock课程:

>>> m = MagicMock()
>>> p = PropertyMock(side_effect=ValueError)
>>> type(m).foo = p
>>> m.foo
Traceback (most recent call last):
....
ValueError
Run Code Online (Sandbox Code Playgroud)

这个例子来自官方网站.


Pic*_*els 1

作者就这个问题发表了一篇博文。我选择了第一个解决方案,如下所示:

class UserMock(Mock):
    @property
    def shop(self):
        raise Shop.DoesNotExist()
Run Code Online (Sandbox Code Playgroud)

http://www.voidspace.org.uk/python/weblog/arch_d7_2010_11_20.shtml#e1196