Ich verwende Mock mit Python und habe mich gefragt, welcher dieser beiden Ansätze besser ist (sprich: mehr Python).
Methode eins : Erstellen Sie einfach ein Scheinobjekt und verwenden Sie dieses. Der Code sieht aus wie:
def test_one (self):
mock = Mock()
mock.method.return_value = True
self.sut.something(mock) # This should called mock.method and checks the result.
self.assertTrue(mock.method.called)
Methode zwei : Verwenden Sie Patch, um ein Modell zu erstellen. Der Code sieht aus wie:
@patch("MyClass")
def test_two (self, mock):
instance = mock.return_value
instance.method.return_value = True
self.sut.something(instance) # This should called mock.method and checks the result.
self.assertTrue(instance.method.called)
Beide Methoden machen dasselbe. Ich bin mir der Unterschiede nicht sicher.
Könnte mich jemand aufklären?
python
unit-testing
mocking
Sardathrion - gegen SE-Missbrauch
quelle
quelle
Antworten:
mock.patch
ist ein ganz anderes Tier alsmock.Mock
.patch
Ersetzt die Klasse durch ein Scheinobjekt und lässt Sie mit der Scheininstanz arbeiten. Schauen Sie sich diesen Ausschnitt an:patch
ErsetztMyClass
auf eine Weise, mit der Sie die Verwendung der Klasse in von Ihnen aufgerufenen Funktionen steuern können. Sobald Sie eine Klasse patchen, werden Verweise auf die Klasse vollständig durch die Scheininstanz ersetzt.mock.patch
wird normalerweise verwendet, wenn Sie etwas testen, das eine neue Instanz einer Klasse innerhalb des Tests erstellt.mock.Mock
Instanzen sind klarer und werden bevorzugt. Wenn Ihreself.sut.something
Methode eine Instanz von erstellt hat,MyClass
anstatt eine Instanz als Parameter zu empfangen,mock.patch
wäre dies hier angemessen.quelle
Ich habe ein YouTube-Video dazu.
Kurze Antwort: Verwenden
mock
Sie diese Option, wenn Sie das Objekt übergeben, das Sie verspotten möchten, undpatch
wenn Sie wenn Sie dies nicht tun. Von den beiden wird Mock stark bevorzugt, da dies bedeutet, dass Sie Code mit der richtigen Abhängigkeitsinjektion schreiben.Dummes Beispiel:
quelle