【发布时间】:2015-03-07 23:49:19
【问题描述】:
如何在包装 python 属性设置器时模拟它(即调用原始设置器)?最直接的方法是访问__set__,但它对属性是只读的,所以不起作用。
from unittest import TestCase
from unittest.mock import patch, PropertyMock
class SomeClass:
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value + 1
@value.setter
def value(self, value):
self._value = value + 1
class TestSomeClass(TestCase):
def test_value_setter(self):
instance = SomeClass(0)
with patch.object(SomeClass.value, '__set__', wraps=SomeClass.value.__set__) as value_setter:
instance.value = 1
value_setter.assert_called_with(instance, 1)
self.assertEquals(instance.value, 3)
文档中还有new_callable=PropertyMock,我尝试将其与wrap 结合使用,但还没有使用。
【问题讨论】:
-
哦,太好了,您注意到 getter 将在您的测试用例中自己返回
3。 :-P -
是的,我在运行代码时意识到 :)
标签: python properties mocking unit-testing