Ich denke, der bessere Weg ist, die Eigenschaft PropertyMock
als zu verspotten, als die __get__
Methode direkt zu verspotten .
In der Dokumentation wird Folgendes angegeben unittest.mock.PropertyMock
: Suchen Sie nach : Ein Modell, das als Eigenschaft oder anderer Deskriptor für eine Klasse verwendet werden soll. PropertyMock
stellt __get__
und __set__
Methoden bereit , mit denen Sie beim Abrufen einen Rückgabewert angeben können.
Hier ist, wie:
class MyClass:
@property
def last_transaction(self):
# an expensive and complicated DB query here
pass
def test(unittest.TestCase):
with mock.patch('MyClass.last_transaction', new_callable=PropertyMock) as mock_last_transaction:
mock_last_transaction.return_value = Transaction()
myclass = MyClass()
print myclass.last_transaction
mock_last_transaction.assert_called_once_with()
@property
. Diese Antwort hat bei mir funktioniert, wenn die andere Antwort (und andere Antworten auf viele andere Fragen) nicht funktioniert hat.