Утверждают, что * любой * атрибут был установлен

У меня есть фиктивный объект 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'])

Это решение требует поддержания дополнительного состояния и не строго проверяет, установлен ли атрибут, только разницу в атрибутах в два момента времени.

Другие вопросы по тегам