Ich denke, die Wahl Dummy-Objekte von Hand zwischen dem Schreiben oder durch einen Rahmen mit einer Menge von den Arten der Komponenten abhängt, die Sie testen.
Wenn es Teil des Vertrags für die zu testende Komponente ist, mit ihren Mitarbeitern nach einem genauen Protokoll zu kommunizieren, dann sind instrumentierte Dummy-Objekte ("Mocks") genau das Richtige. Es ist häufig viel einfacher, solche Protokolle unter Verwendung eines Mocking-Frameworks als durch Handcodierung zu testen. Stellen Sie sich eine Komponente vor, die zum Öffnen eines Repositorys, zum Ausführen einiger Lese- und Schreibvorgänge in einer vorgegebenen Reihenfolge und zum Schließen des Repository erforderlich ist - selbst bei einer Ausnahme. Ein spöttisches Framework würde es einfacher machen, alle notwendigen Tests einzurichten. Anwendungen im Zusammenhang mit Telekommunikation und Prozesssteuerung (um ein paar zufällige Beispiele auszuwählen) sind voll von Komponenten, die auf diese Weise getestet werden müssen.
Auf der anderen Seite haben viele Komponenten in allgemeinen Geschäftsanwendungen keine besonderen Einschränkungen hinsichtlich der Kommunikation mit ihren Mitarbeitern. Stellen Sie sich eine Komponente vor, die eine Art Analyse von beispielsweise Universitätskursen durchführt. Die Komponente muss Instructor-, Student- und Kursinformationen aus einem Repository abrufen. Aber es spielt keine Rolle, in welcher Reihenfolge die Daten abgerufen werden: Lehrer-Schüler-Kurs, Schüler-Kurs-Lehrer, All-at-Once oder was auch immer. Es besteht keine Notwendigkeit, ein Datenzugriffsmuster zu testen und durchzusetzen. In der Tat wäre es wahrscheinlich schädlich, dieses Muster zu testen, da es eine bestimmte Implementierung unnötigerweise erfordern würde. In diesem Kontext sind einfache uninstrumentierte Dummy-Objekte ("Stubs") angemessen und ein spöttisches Framework ist wahrscheinlich zu viel.
Ich sollte darauf hinweisen, dass selbst wenn Stubbing, ein Framework immer noch Ihr Leben erleichtern kann. Man hat nicht immer den Luxus, die Unterschriften seiner Mitarbeiter zu diktieren. Stellen Sie sich vor, Sie testen eine Komponente, die für die Verarbeitung von Daten benötigt wird, die von einer dicken Schnittstelle wie IDataReader oder ResultSet abgerufen werden. Das Hand-Stubbing solcher Schnittstellen ist bestenfalls unangenehm - insbesondere dann, wenn die zu testende Komponente tatsächlich nur drei der zig Methoden in der Schnittstelle verwendet.
Für mich waren die Projekte, die Mockframeworks erforderten, fast ausnahmslos systemprogrammierender Natur (z. B. Datenbank- oder Webinfrastrukturprojekte oder Low-Level-Installation in einer Geschäftsanwendung). Bei Anwendungsprogrammierungsprojekten war meine Erfahrung, dass nur wenige Mocks in Sicht waren.
Angesichts der Tatsache, dass wir immer bestrebt sind, die chaotischen Low-Level-Infrastrukturdetails so gut wie möglich zu verstecken, scheint es, dass wir versuchen sollten, die einfachen Stubs weit über den Mocks zu haben.
Hardcoding ist viel einfacher, wenn Sie keine Erfahrung mit dem Framework haben. Ein Framework ist leistungsfähiger, besonders wenn Sie Aussagen darüber machen wollen, ob eine Methode überhaupt oder zu oft aufgerufen wird. – k3b