Ich habe eine Klasse in meinem Code, der eine Drittanbieter-Bibliothek verwendet. Ich möchte mich über die Instanzmethode des Objekts lustig machen, die ich durch Aufruf einer Instanzmethode der Bibliotheksklasse erhalte. Mir ist nicht klar, wie ich die Instanzmethode dieses inneren Objekts verspotten soll. Im Anschluss ist mein Code:Mocking eine Instanz Methode des inneren Objekts in Python 3.4
Meine Klasse:
from a import A
class MyClass(object):
def __init__(self):
self.obj = A()
def do_something(self):
b = self.obj.get_inner_object()
result = b.do_inner()
return result
Hier ist meine Testklasse ist:
from unittest import TestCase
from unittest.mock import MagicMock
from unittest.mock import patch
from a import A
class TestMyClass(TestCase):
def __init__(self):
self.my_class = MyClass()
@patch.object(A,'get_inner_object')
def test_do_something(self, mock_get_inner_object):
test_res = self.my_class.do_something()
Wie Sie oben sehen können, würde Ich mag weg 2 Methoden meiner Bibliothek verspotten - get_inner_object() und do_inner() ist die Instanzmethode des Objekts, das von get_inner_object() zurückgegeben wird. Ich konnte get_inner_object() vortäuschen, aber ich weiß nicht, wie ich die do_inner() -Methode verspotten soll. Bitte klären Sie. Hier ist die Hilfe, die ich folgende bin: https://www.toptal.com/python/an-introduction-to-mocking-in-python
Wenn Sie verspotten 'get_inner_object' es wird bereits ein Modell zurückkehren, auf dem Sie' do_inner' aufrufen können. – jonrsharpe
sicher, aber wie weiß 'MyClass' über dieses Mock-Objekt, da ich es nicht an 'MyClass' übergebe? –
Was meinst du * "weiß es" * ?! Es "weiß" * nichts, es macht nur die Anrufe oder wirft einen Fehler, wenn es nicht möglich ist, ob es ein Schein ist oder nicht. Aus Ihrem Beispiel sieht es so aus, als ob Sie sich über "A" lustig machen sollten, da es sonst keine Möglichkeit gibt, es zu injizieren. – jonrsharpe