2013-10-11 4 views
6

Pythonで緩く定義されたdictオブジェクトを簡単に模倣する簡単な方法はありますか?例えば、与えられたdict inputを簡単に表現するには、その中の各値が最小値と最大値、長さ、型などの特定のメタ定義に従っているかどうかチェックしたいのですか?緩く定義されたPython dictオブジェクトを模擬する簡単な方法

これを行うことができることは、テストを書くときなどに便利です。 (Pythonのバージョンでunittest.mock 3.3+)mockにおいて

一つの値は次のように、ANY値とすることができるように指定することができ

ように、辞書のようなオブジェクトであるべき上記 barただし

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

、中私は実際にそのように対処するために、AnyValidformencodeunittest.mockに実装偉大な作業を活用し、最小限のライブラリを書いた

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

答えて

5

ケース。 AnyValidは、他の多くの条件を指定できるformencodeにおけるバリの大きな集合から任意のバリを取ることができるされているので、上述のような辞書オブジェクトを試験例えば

は、次いで

>>> 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) 
>>> 

のように表すことができます。同様の表現方法。

+0

ライブラリを書くのに9分、いい –

関連する問題