2013-10-11 61 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分鐘寫一個圖書館,漂亮 –

相關問題