2013-10-11 28 views
6

有没有简单的方法来模拟Python中松散定义的dict对象?例如,如何轻松地表达给定字典input,我想检查其中的每个值是否符合特定的元定义,如最小值和最大值,长度和类型?一种简单的方法来模拟松散定义的Python字典对象

能够做到这一点可能会很方便,例如,在编写测试时。

mockunittest.mock在Python版本3.3+)一个可以指定一个值可以是ANY值,如在

>>> mock = Mock(return_value=None) 
>>> mock('foo', bar=object()) 
>>> mock.assert_called_once_with('foo', bar=ANY) 

然而,如果上述bar应该是一个字典状物体,像

>>> {'baz': <an integer between -3 and 14>, 'qux': <'yes' or 'no'>} 

回答

5

我实际写入AnyValid,它利用在formencodeunittest.mock实现伟大的工作最小的图书馆,处理这样的案例。

例如,在测试类似上述一个字典对象,然后可以表达为

>>> from mock import Mock 
>>> from any_valid import AnyValid, Int, OneOf 
>>> valid_bar = { 
...  'baz': AnyValid(Int(min=-3, max=14)), 
...  'qux': AnyValid(OneOf(['yes', 'no'])), 
...  } 
>>> mock = Mock(return_value=None) 
>>> mock('foo', bar={'baz': 4, 'qux': 'yes'}) 
>>> mock.assert_called_once_with('foo', bar=valid_bar) 
>>> 

由于AnyValid是可以采取任何验证从大集合中formencode验证的,许多其他的条件可以在指定类似的表现方式。

+0

9分钟写一个图书馆,漂亮 –

相关问题