Was ist Mocking? .
Antworten
Zu viele Anzeigen?Einleitung: Wenn Sie das Substantiv mock im Wörterbuch nachschlagen, werden Sie feststellen, dass eine der Definitionen des Wortes etwas ist, das als Nachahmung gemacht wurde ist.
Möcking wird hauptsächlich in der Unittesting verwendet. Ein zu testendes Objekt kann Abhängigkeiten von anderen (komplexen) Objekten haben. Um das Verhalten des Objekts zu isolieren, möchten Sie die anderen Objekte durch Mocks ersetzen, die das Verhalten der echten Objekte simulieren. Dies ist nützlich, wenn die echten Objekte nicht praktikabel in den Unittest einzubeziehen sind.
Kurz gesagt, Mocking bedeutet, Objekte zu erstellen, die das Verhalten von echten Objekten simulieren.
Manchmal möchten Sie möglicherweise zwischen Mocking und Stubbing unterscheiden. Es kann Meinungsverschiedenheiten zu diesem Thema geben, aber meine Definition eines Stubs ist ein "minimales" simuliertes Objekt. Der Stub implementiert gerade genug Verhalten, um dem zu testenden Objekt die Ausführung des Tests zu ermöglichen.
Ein Mock ist wie ein Stub, aber der Test wird auch überprüfen, ob das zu testende Objekt den Mock wie erwartet aufruft. Ein Teil des Tests besteht darin, zu überprüfen, ob der Mock korrekt verwendet wurde.
Um ein Beispiel zu geben: Sie können eine Datenbank stubben, indem Sie eine einfache In-Memory-Struktur implementieren, um Datensätze zu speichern. Das zu testende Objekt kann dann Datensätze in den Datenbank-Stub lesen und schreiben, um es zu ermöglichen, den Test auszuführen. Dies könnte das Verhalten des Objekts testen, das nicht mit der Datenbank zusammenhängt, und der Datenbank-Stub würde nur eingefügt werden, um den Test durchzuführen.
Wenn Sie stattdessen überprüfen möchten, ob das zu testende Objekt bestimmte Daten in die Datenbank schreibt, müssen Sie die Datenbank mocken. Ihr Test würde dann Aussagen darüber enthalten, was in die Datenbank-Mock geschrieben wurde.
Es gibt viele Antworten auf SO und gute Beiträge im Web zum Thema Mocking. Ein Ort, an dem du vielleicht mit der Suche beginnen möchtest, ist der Beitrag von Martin Fowler Mocks Aren't Stubs, in dem er viele Ideen zum Thema Mocking diskutiert.
In einem Absatz - Mocking ist eine besondere Technik, um das Testen einer Codeeinheit zu ermöglichen, ohne von Abhängigkeiten abhängig zu sein. Im Allgemeinen unterscheidet sich Mocking von anderen Methoden dadurch, dass Mock-Objekte, die zur Ersetzung von Codeabhängigkeiten verwendet werden, Erwartungen setzen können - ein Mock-Objekt wird wissen, wie es von deinem Code aufgerufen werden soll und wie es reagieren soll.
Deine ursprüngliche Frage erwähnte TypeMock, daher habe ich meine Antwort dazu unten gelassen:
TypeMock ist der Name eines kommerziellen Mocking-Frameworks.
Es bietet alle Funktionen der kostenlosen Mocking-Frameworks wie RhinoMocks und Moq sowie einige leistungsstärkere Optionen.
Ob du TypeMock wirklich brauchst, ist sehr umstritten - du kannst mit kostenlosen Mocking-Bibliotheken die meisten Mockings machen, die du jemals benötigen wirst, und viele argumentieren, dass die Möglichkeiten, die TypeMock bietet, dich oft von gut encapsulated design abbringen werden.
Wie eine andere Antwort bereits sagte, ist 'TypeMocking' kein tatsächlich definierter Begriff, könnte aber sich auf die Art des Mockings beziehen, das TypeMock bietet, indem der CLR-Profiler verwendet wird, um .Net-Aufrufe zur Laufzeit abzufangen und somit eine viel größere Fähigkeit zum Fälschen von Objekten zu ermöglichen (ohne Anforderungen wie das Erfordern von Schnittstellen oder virtuellen Methoden).
Mock ist eine Methode / ein Objekt, das das Verhalten einer realen Methode / eines realen Objekts auf kontrollierte Weise simuliert. Mock-Objekte werden bei der Unit-Tests eingesetzt.
Oft ruft eine Methode unter einem Test andere externe Dienste oder Methoden darin auf. Diese werden als Abhängigkeiten bezeichnet. Sobald sie gemockt sind, verhalten sich die Abhängigkeiten so, wie wir sie definiert haben.
Mit den von Mocks kontrollierten Abhängigkeiten können wir das Verhalten der von uns codierten Methode einfach testen. Dies nennt man Unit-Tests.
Der Zweck von Mocking-Typen besteht darin, Abhängigkeiten zu trennen, um den Test auf eine bestimmte Einheit zu isolieren. Stubs sind einfache Stellvertreter, während Mocks Stellvertreter sind, die die Verwendung überprüfen können. Ein Mocking-Framework ist ein Tool, das Ihnen helfen wird, Stubs und Mocks zu generieren.
BEARBEITEN: Da im Originaltext von "Typ-Mocking" die Rede war, hatte ich den Eindruck, dass dies auf TypeMock bezogen ist. In meiner Erfahrung ist der allgemeine Begriff einfach "Mocking". Bitte ignorieren Sie die unten stehenden Infos speziell zu TypeMock.
TypeMock Isolator unterscheidet sich von den meisten anderen Mocking-Frameworks, da es durch Modifizieren von IL auf dem Fly funktioniert. Dadurch kann es Typen und Instanzen mocken, die die meisten anderen Frameworks nicht mocken können. Um diese Typen/Instanzen mit anderen Frameworks zu mocken, müssen Sie Ihre eigenen Abstraktionen bereitstellen und diese mocken.
TypeMock bietet eine hohe Flexibilität auf Kosten einer sauberen Laufzeitumgebung. Als Nebeneffekt der Art und Weise, wie TypeMock seine Ergebnisse erzielt, erhalten Sie manchmal sehr seltsame Ergebnisse bei der Verwendung von TypeMock.
- See previous answers
- Weitere Antworten anzeigen