Python:模拟实例时的问题
我在模拟一个对象以测试一个描述符时遇到了问题。
这是描述符的代码:
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()需要三个参数。但是我注意到在回答中提到最后一个参数不应该传递一个元组。
不过,当我在测试函数中调用validator('').validate()时,它也没有正常工作。
3 个回答
0
也许模拟一个实例的最好方法就是问:“你自己称自己是一个实例吗?”
不过说正经的,def test_text_validator_raises_exception:
应该写成 def test_text_validator_raises_exception():
。
但是你遇到什么问题了呢?就像第一个评论者问的那样。
1
我想你需要在函数名字后面加上()。
3
validator
在Text
中是一个对象工厂,比如说是一个类的对象。validator
在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, '')