Frage

Viele Menschen nutzen die Mock-Objekte, wenn Sie schreiben unit-tests.Was ist ein Mock-Objekt?Warum würde ich jemals einen brauchen?Brauche ich ein Mock-Objekt Framework?

War es hilfreich?

Lösung

Object Mocking verwendet wird, um Abhängigkeiten aus Ihrem Gerät testen.Manchmal haben Sie einen test wie "SelectPerson" zu wählen Sie eine person aus der Datenbank und kehren Sie ein Person-Objekt.

Um dies zu tun, normalerweise müssen Sie eine Abhängigkeit auf die Datenbank, allerdings mit object mocking Sie können simulieren die Interaktion mit der Datenbank mit einem mock-framework, so dass es könnte Rückkehr aus einem Datensatz der sieht aus wie einer aus der Datenbank zurückgegeben, und Sie können dann testen Sie Ihren code, um zu gewährleisten, dass es Griffe die übersetzung, ein dataset ein person-Objekt, anstatt es zu testen, ob eine Verbindung zu der Datenbank vorhanden ist.

Andere Tipps

Mehrere Menschen haben bereits eine Antwort auf das "was", aber hier sind ein paar quick 'warums', dass ich denken kann:

  1. Leistung

    Da unit-tests sollten schnell sein, die Prüfung eine Komponente, die interagiert mit einem Netzwerk, einer Datenbank oder anderen Zeit-intensiv Ressource nicht brauchen, um die Strafe zu bezahlen, wenn es fertig ist mit mock Objekte.Die Einsparungen summieren sich schnell.

  2. Collaboration

    Wenn Sie schreiben einen schön gekapselt Stück code für die Interaktion mit fremden code (das ist nicht wurde doch geschrieben, oder ist das sein parallel entwickelt - eine gemeinsame Szenario), die Sie ausüben können, Ihren code mit mock-Objekten wenn ein Schnittstelle vereinbart worden ist.Andernfalls wird Ihr code kann nicht beginnen zu getestet werden, bis die andere Komponente ist fertig.

Ein mock-Objekt können Sie testen, gegen genau das, was Sie schreiben, und abstrakte details wie den Zugriff auf eine Ressource (Laufwerk, Netzwerk-service, etc).Die mock-dann können Sie so tun, als externe Ressource oder Klasse oder was auch immer.

Sie brauchen nicht wirklich ein mock-Objekt framework, verlängern Sie einfach die Klasse der Funktionen, die Sie wollen nicht sorgen zu machen über die in den test und machen Sie sicher, dass die Klasse, die Sie testen können Ihre mock anstelle der realen Sache (pass es kann über einen Konstruktor oder setter oder so etwas.

Die Praxis wird zeigen, wenn mocks sind hilfreich und wenn Sie nicht sind.

EDIT:Spott-Ressourcen ist besonders wichtig, so dass Sie nicht haben zu verlassen sich auf, Sie zu bestehen, während der Prüfung, und Sie können mock die details, wie Sie sind und was Sie zu reagieren (wie die Simulation eine FileNotFoundException, oder ein webservice, der fehlt, oder verschiedene mögliche Rückgabewerte von einem webservice)...alle, ohne die langsamen Zugriffszeiten beteiligt (mocking wird sich VIEL schneller als der Zugriff auf solche Ressourcen im test).

Brauche ich ein Mock-Objekt Framework?

Sicherlich nicht.Manchmal schreiben mocks von hand kann sehr mühsam.Aber für einfache Sachen, es ist gar nicht so schlecht.Anwendung des Grundsatzes der Im Letzten Moment Verantwortlich um mocking frameworks, sollten Sie nur den Schalter von hand geschriebene Parodie auf ein Gerüst, wenn Sie bewiesen haben, dass sich hand-schreiben spottet, ist mehr ärger als es Wert ist.

Wenn Sie gerade erst angefangen mit Spott, springen gerade in ein framework wird mindestens verdoppeln Sie Ihre Lernkurve (kann man das doppelte einer Kurve?).Mocking-frameworks machen viel mehr Sinn, wenn Sie habe ein paar Projekte schreiben mocks von hand.

Object Mocking ist ein Weg, um eine "virtuelle" oder verspottet Objekt ein interface abstrakte Klasse oder eine Klasse mit virtuellen Methoden.Es ermöglicht Ihnen, die Art wickeln Sie diese in Ihre eigene definition für Testzwecke.Es ist nützlich für die Herstellung ein Objekt, stützte sich auf die für einen bestimmten Codeblock Ihr testen.

Ein beliebtes eines, das ich gerne nutze, ist aufgerufen Moq, aber es gibt viele andere, wie RhinoMock und zahlreichen diejenigen, die ich nicht kenne.

Es ermöglicht Ihnen zu testen, wie sich ein Teil von Ihr Projekt interagiert mit dem rest, ohne Gebäude, die ganze Sache und möglicherweise fehlt ein wichtiger Teil.

EDIT:Tolles Beispiel aus der wikipedia:Es ermöglicht Ihnen das testen von code, im Vorfeld, wie bei einem Auto-designer verwendet ein crash test dummy zu testen Sie das Verhalten eines Autos bei einem Unfall.

Eine andere Verwendung ist, es wird lassen Sie Sie test gegen andere Teile des Systems, die nicht noch gebaut werden.Für Beispiel, wenn Ihre Klasse hängt von einigen anderen Klasse, ist ein Teil einer Funktion, die jemand anderes arbeiten, Sie können einfach Fragen für ein meist komplett Schnittstelle, Programm, der Schnittstelle und einfach verspotten die details, wie Sie erwarten, dass Sie funktionieren.Dann, stellen Sie sicher, dass Ihre Annahmen über die Schnittstelle korrekt waren (entweder während der Entwicklung oder sobald die Funktion abgeschlossen ist).

Ob oder nicht Sie ein mocking framework nützlich ist, hängt zum Teil von der Sprache der code Sie schreiben.Eine statische Sprache, die Sie benötigen, um in zusätzliche Anstrengung, um trick, den compiler in die Annahme Ihres mock-Objekte als Ersatz für die Reale Sache.In einer dynamisch typisierten Sprache wie Python, Ruby oder Javascript können Sie in der Regel einfach befestigen Sie die Methoden auf beliebige Objekt oder die Klasse auf und übergeben, die als parameter -- so einen Rahmen hinzufügen würde viel weniger Wert.

2 empfohlene mocking-frameworks für .net Unit-Tests sind Typemock Isolator und Rhino Mock.

Im folgenden link finden Sie eine Erläuterung von Typemock, warum Sie benötigen, eine mocking framework für Unit-Tests.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top