Есть метод, который получает в качестве аргумента объект и обращается к некоторым свойствам (@property) этого объекта.
class Event:
@property
def number(self):
return 123
def myFunction(event):
return event.number * 10
Как написать тест, который проверит, было ли обращение?
Если бы это был просто метод, всё было бы элементарно. Достаточно создать вот такой класс:
class MockEvent:
def __init__(self):
self.number = Mock(return_value=10)
Экземпляр этого класса передать в качестве параметра и проверить, был ли вызван метод number. Но у меня не метод, а свойство, то есть оно не вызывается, его пытаются прочитать. Соответственно, магия моков не срабатывает. Я также пытался заменить моком методы __getattr__ и __getattribute__, но это не дало результата, обращение к произвольному атрибуту выдаёт AttributeError.
Можно, конечно, просто проверить результат, который возвращает метод, но я хочу быть уверен, что результат будет извлечён именно из этих свойств именно этого объекта. Или я не должен этого хотеть?