wake-up-neo.net

Was ist Spott?

Was ist Spott? .

472
masoud ramezani

Prolog: Wenn Sie das Substantiv mock im Wörterbuch nachschlagen, werden Sie feststellen, dass eine der Definitionen des Wortes etwas, das als Nachahmung gemacht wurde ist.


Das Verspotten wird hauptsächlich bei Unit-Tests eingesetzt. Ein zu testendes Objekt kann Abhängigkeiten von anderen (komplexen) Objekten aufweisen. Um das Verhalten des Objekts zu isolieren, möchten Sie die anderen Objekte durch Mocks ersetzen, die das Verhalten der realen Objekte simulieren. Dies ist nützlich, wenn die Einbeziehung der realen Objekte in den Komponententest nicht praktikabel ist.

Kurz gesagt, beim Verspotten werden Objekte erstellt, die das Verhalten realer Objekte simulieren.


Manchmal möchten Sie vielleicht zwischen spöttisch und stumm unterscheiden. Es mag einige Meinungsverschiedenheiten über dieses Thema geben, aber meine Definition eines Stubs ist ein "minimales" simuliertes Objekt. Der Stub implementiert gerade so viel Verhalten, dass das zu testende Objekt den Test ausführen kann.

Ein Mock ist wie ein Stub, aber der Test überprüft auch, ob das zu testende Objekt den Mock erwartungsgemäß aufruft. Ein Teil des Tests besteht darin, zu überprüfen, ob der Schein korrekt verwendet wurde.

Ein Beispiel: Sie können eine Datenbank löschen, indem Sie eine einfache In-Memory-Struktur zum Speichern von Datensätzen implementieren. Das zu testende Objekt kann dann Datensätze lesen und in den Datenbank-Stub schreiben, damit es den Test ausführen kann. Dadurch könnte ein Verhalten des Objekts getestet werden, das nicht mit der Datenbank zusammenhängt, und der Datenbank-Stub würde nur einbezogen, damit der Test ausgeführt werden kann.

Wenn Sie stattdessen überprüfen möchten, ob das zu testende Objekt bestimmte Daten in die Datenbank schreibt, müssen Sie die Datenbank verspotten. Ihr Test würde dann Aussagen darüber enthalten, was in den Datenbank-Mock geschrieben wurde.

539

Es gibt viele Antworten auf SO und gute Beiträge im Internet zum Thema Spott. Ein Ort, an dem Sie vielleicht anfangen möchten, nachzuschauen, ist der Beitrag von Martin Fowler Mocks Sind nicht Stubs , in denen er viele der Ideen des Verspottens bespricht.

In einem Absatz - Mocking ist eine bestimmte Technik, um das Testen einer Codeeinheit zu ermöglichen, ohne auf Abhängigkeiten angewiesen zu sein. Im Allgemeinen unterscheidet sich die Verspottung von anderen Methoden dadurch, dass Verspottungsobjekte, die zum Ersetzen von Codeabhängigkeiten verwendet werden, das Setzen von Erwartungen ermöglichen. Ein Verspottungsobjekt weiß, wie es von Ihrem Code aufgerufen wird und wie es reagiert.


Ihre ursprüngliche Frage erwähnte TypeMock, daher habe ich meine Antwort auf diese Frage unten hinterlassen:

TypeMock ist der Name eines kommerziellen Spott-Frameworks .

Es bietet alle Funktionen der kostenlosen Verspottungs-Frameworks wie RhinoMocks und Moq sowie einige leistungsfähigere Optionen.

Ob Sie TypeMock benötigen oder nicht, ist höchst umstritten - Sie können mit kostenlosen Verspottungsbibliotheken die meisten Verspottungen durchführen, die Sie jemals wünschen würden, und viele argumentieren, dass die von TypeMock angebotenen Fähigkeiten Sie häufig von einem gut gekapselten Design abbringen werden.

Wie in einer anderen Antwort angegeben, ist "TypeMocking" eigentlich kein definiertes Konzept, sondern kann als die Art der Verspottung verstanden werden, die TypeMock anbietet, indem der CLR-Profiler zur Laufzeit .NET-Aufrufe abfängt, wodurch die Fähigkeit, Objekte zu fälschen, wesentlich erhöht wird (keine Anforderungen) Schnittstellen oder virtuelle Methoden benötigen).

30
David Hall

Mock ist eine Methode/ein Objekt, das das Verhalten einer realen Methode/eines realen Objekts auf kontrollierte Weise simuliert. Bei Unit-Tests werden Scheinobjekte verwendet.

Häufig ruft eine getestete Methode andere externe Dienste oder Methoden auf. Diese werden Abhängigkeiten genannt. Einmal verspottet, verhalten sich die Abhängigkeiten so, wie wir sie definiert haben.

Da die Abhängigkeiten durch Mocks gesteuert werden, können wir das Verhalten der von uns codierten Methode auf einfache Weise testen. Dies ist ein Unit-Test.

Was ist der Zweck von Scheinobjekten?

Mocks vs Stubs

nit-Tests vs Funktionstests

9
Venkat Kotra

Der Zweck des Verspottens von Typen besteht darin, Abhängigkeiten zu trennen, um den Test auf eine bestimmte Einheit zu isolieren. Stubs sind einfache Surrogate, während Mocks Surrogate sind, die die Verwendung verifizieren können. Ein Mocking-Framework ist ein Tool, mit dem Sie Stubs und Mocks generieren können.

EDIT : Da der ursprüngliche Wortlaut "Type Mocking" erwähnte, hatte ich den Eindruck, dass dies mit TypeMock zu tun hatte. Nach meiner Erfahrung ist der allgemeine Begriff nur "spöttisch". Bitte ignorieren Sie die unten stehenden Informationen speziell zu TypeMock.

TypeMock Isolator unterscheidet sich von den meisten anderen Verspottungs-Frameworks dadurch, dass es das Ändern von IL im laufenden Betrieb ermöglicht. Das ermöglicht es, Typen und Instanzen zu verspotten, die die meisten anderen Frameworks nicht verspotten können. Um diese Typen/Instanzen mit anderen Frameworks zu verspotten, müssen Sie Ihre eigenen Abstraktionen bereitstellen und diese verspotten.

TypeMock bietet große Flexibilität auf Kosten einer sauberen Laufzeitumgebung. Als Nebeneffekt der Art und Weise, wie TypeMock seine Ergebnisse erzielt, werden Sie bei der Verwendung von TypeMock manchmal sehr seltsame Ergebnisse erzielen.

5
Brian Rasmussen

Beim Verspotten werden Pseudoobjekte generiert, die das Verhalten realer Objekte für Tests simulieren

4
LOL

Ich würde denken, die Verwendung des TypeMock-Isolator-Mocking-Frameworks wäre TypeMocking.

Es ist ein Tool, das Mocks zur Verwendung in Komponententests generiert, ohne dass Sie Ihren Code unter Berücksichtigung der IoC schreiben müssen.

3
Oded

Wenn es sich bei Ihrem Mock um eine Netzwerkanfrage handelt, besteht eine andere Alternative darin, einen echten Testserver zu haben. Mit diesem Service können Sie eine Anfrage und Antwort für Ihre Tests generieren. http://testerurl.com/

1
foobar8675