断言* any *属性已设置

时间:2014-04-01 16:49:22

标签: python python-mock

我有一个Python mock对象,我想断言是否设置了该对象的任何属性。

我不相信PropertyMock可以用于我的目的,因为我必须知道是否设置了任何属性,而不是特定属性。

看起来我也不能模拟模拟对象的__setattr__方法。

如何测试是否已设置模拟对象的任意属性?

1 个答案:

答案 0 :(得分: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'])

此解决方案需要维护其他状态,并且不会严格测试是否设置了属性,只测试了两个时间点属性的差异。