Python:模拟实例的问题

标签 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() 恰好有 3 个参数。但是我在答案中注意到我不应该将元组作为最后一个参数传递。

但是当我在测试函数中调用 validator('').validate() 时它也不起作用。

最佳答案

    Text 中的
  • validator 是一个对象工厂,例如类对象
  • test_.. 函数中的
  • validator 用作具体实例——对象工厂的产品。

你应该给 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/

相关文章:

Python:将 n 元组转换为 x 元组,其中 x < n

python - 跨平台的 urllib 问题

python - PyObject_Call 中没有错误的 NULL 结果

python - Python 上的 SSL 问题

python - 当基于超过 2 个数据帧的标题进行合并和求和时,valueerror 数组太大 arr.size

python - 创建 GAE 实体时遇到问题

python - 使用 TLS 和 Python 进行身份验证

python - 获取多个列表共有的字符串元素的索引

python - 如何读取expect脚本中的send命令输出

python - Python 的 "with"语句的 OCaml 对应项是什么(自动释放资源)