Ich habe eine Python-Datei a.py
, die zwei Klassen A
und B
enthält.Python gibt MagicMock-Objekt anstelle von return_value zurück
class A(object):
def method_a(self):
return "Class A method a"
class B(object):
def method_b(self):
a = A()
print a.method_a()
würde Ich mag B
method_b
in der Klasse Unittest durch A
spöttisch. Hier ist der Inhalt der Datei testa.py
für diesen Zweck:
import unittest
import mock
import a
class TestB(unittest.TestCase):
@mock.patch('a.A')
def test_method_b(self, mock_a):
mock_a.method_a.return_value = 'Mocked A'
b = a.B()
b.method_b()
if __name__ == '__main__':
unittest.main()
Ich erwarte, dass Mocked A
in der Ausgabe zu erhalten. Aber was ich bekomme ist:
<MagicMock name='A().method_a()' id='4326621392'>
Wo mache ich mich falsch?
Beim Testen gibt 'A()' den 'return_value' von' mock_A' zurück (ein regulärer 'MagicMock', da Sie nichts anderes angegeben haben), was keine Instanz der Klasse' A' ist. Sie müssen diesen 'return_value' so einstellen, dass er eine definierte' method_a' hat. – jonrsharpe
mock_a.method_a.return_value = 'Mocked A' => Mock_a(). Method_a.return_value = 'Mocked A' sollte besser sein :) –
@AliSAIDOMAR ist genau richtig, es ist der Rückgabewert von Aufruf 'Mock_a', die die haben sollte Methode, nicht "Mock_a" selbst. – jonrsharpe