我在模拟对象以测试描述符时遇到问题。
这是描述符的代码:
class Text(object):
def __init__(self, default_value=u'', validators=[]):
self.validators = validators
self._value = default_value
def __set__(self, instance, value):
for validator in self.validators:
validator(value).validate()
这是测试:
def test_text_validator_raises_exception(self):
validator = Mock()
validator.validate.side_effect = ValidationError()
text = Text(validators=[validator])
self.assertRaises( ValidationError, text__set__, (text, '') )
编辑: 函数里有() 是我复制代码的时候打错了。
我得到的错误是 set() 恰好有 3 个参数。但是我在答案中注意到我不应该将元组作为最后一个参数传递。
但是当我在测试函数中调用 validator('').validate() 时它也不起作用。
最佳答案
validator
是一个对象工厂,例如类对象validator
用作具体实例——对象工厂的产品。
Text
中的 test_..
函数中的 你应该给 Text()
一些东西,用 .validate
方法返回对象而不是对象本身:
def test_text_validator_raises_exception(self):
validator = Mock()
validator.validate.side_effect = ValidationError()
text = Text(validators=[Mock(return_value=validator)])
self.assertRaises(ValidationError, text.__set__, text, '')
关于Python:模拟实例的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168301/