Ich versuche, ein verkettete Django Modellobjekt in der folgenden Dummy-Methode zu verspotten, nichtWie spottet man ein Django-Modellobjekt (zusammen mit seinen Methoden)?
# utils.py
def foo_something_exist():
if Foo.objects.get(a='something').exist():
return 'exist'
# test.py
import unittest.mock import patch
import utils
.
.
.
@patch('utils.Foo')
def test_foo_something_exist_returns_none(self, mock_foo):
mock_foo.objects.get.exists.return_value = False
self.assertIsNone(utils.foo_something_exist())
.
.
.
test_foo_something_exist()
den Test. Ich entdeckte, dass Foo.objects.get(a='something').exist()
in utils.py ein MagicMock-Objekt (<MagicMock name='Member.objects.get().exists()' id='xxxxxx'>
) anstelle von False
war, die zum Versagen dieser Testfunktion beigetragen haben. Und ja, ich habe auch versucht mock_foo.objects.return_value.get.return_value.exists.return_value = False
, die in einem Post erwähnt wurde. Pointer/Hinweise, um ein Modellobjekt (mit seinen verketteten Methoden) richtig zu verspotten, ist zu schätzen.
Vielen Dank im Voraus.
Vielen Dank für Ihre Antwort. Darf ich wissen, was 'mock_foo.get.return_value = mock_foo' macht? – tebesfinwo
wird das gepatchte Objekt als Rückgabewert für jeden verketteten Methodenaufruf verwendet. Sie haben also ein gepatchtes Objekt mit den Methoden, und alle geben dasselbe gepatchte Objekt zurück. Auf diese Weise ist es auch egal in welcher Reihenfolge Sie die Methode aufrufen. – masterfloda