Утверждают, что * любой * атрибут был установлен
У меня есть фиктивный объект Python, и я хотел бы подтвердить, был ли установлен какой-либо атрибут этого объекта.
Я не верю, что PropertyMock будет работать для моих целей, потому что я должен знать, был ли установлен какой-либо атрибут, а не конкретное свойство.
Это также не кажется, что я могу издеваться над __setattr__
метод макета объекта.
Как я могу проверить, был ли установлен произвольный атрибут фиктивного объекта?
1 ответ
Хотя это решение не является идеальным, вы можете сохранить атрибуты фиктивного объекта после инициализации и сравнить их с атрибутами во время тестирования.
>>> 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'])
Это решение требует поддержания дополнительного состояния и не строго проверяет, установлен ли атрибут, только разницу в атрибутах в два момента времени.