2014-04-01 49 views
2

我有一個python mock對象,我想斷言是否設置了該對象的任何屬性。我不相信PropertyMock將用於我的目的,因爲我必須知道是否設置了任何屬性,而不是特定的屬性。它也不會像我可以嘲笑模擬對象的方法__setattr__蟒蛇模擬斷言任何屬性設置

如何測試模擬對象的任意屬性是否已設置?

回答

2

雖然此解決方案並不理想,但您可以在初始化後存儲模擬對象的屬性,並將它們與測試時的屬性進行比較。

>>> myobj = Mock() 
>>> attrsbefore = set(dir(myobj)) 
>>> attrsbefore 
set(['reset_mock', 'method_calls', 'assert_called_with', 'call_args_list', 'mock_calls', 'side_effect', 'assert_called_once_with', 'assert_has_calls', 'configure_mock', 'attach_mock', 'return_value', 'call_args', 'assert_any_call', 'mock_add_spec', 'called', 'call_count']) 
>>> myobj.foo = 'bar' 
>>> set(dir(myobj)) - attrsbefore 
set(['foo']) 

此解決方案需要額外的保持狀態,不嚴格地測試屬性是否被設置,僅在屬性的差在兩個時間點。