web-dev-qa-db-de.com

Was ist ein "Stub"?

Um mit meinem neuen Vorsatz fortzufahren, mehr in TDD zu integrieren, arbeite ich nun mit Rhino Mocks .

Eine Sache, die ich gerne machen möchte, ist sicherzustellen, dass ich wirklich weiß, worauf ich mich einlasse, also wollte ich mein Verständnis von dem, was ich bisher gesehen habe, überprüfen (und ich dachte, es wäre gut, wenn ich es hier oben als etwas sehen würde Ressource).

Was ist ein "Stub"?

104
Rob Cooper

Martin Fowler schrieb einen ausgezeichneten Artikel zu diesem Thema. Aus diesem Artikel:

Meszaros verwendet den Begriff Test Double als Oberbegriff für jede Art von Scheinobjekt, das zu Testzwecken anstelle eines realen Objekts verwendet wird. Der Name kommt von der Vorstellung eines Stunt Double in Filmen. (Eines seiner Ziele bestand darin, die Verwendung eines bereits weit verbreiteten Namens zu vermeiden.) Meszaros definierte dann vier bestimmte Arten von Doppeln:

  • Dummy-Objekte werden herumgereicht, aber nie verwendet. Normalerweise werden sie nur zum Ausfüllen von Parameterlisten verwendet.
  • Gefälschte Objekte haben tatsächlich funktionierende Implementierungen, benötigen jedoch normalerweise eine Abkürzung, wodurch sie für die Produktion nicht geeignet sind (eine In-Memory-Datenbank ist ein gutes Beispiel).
  • Stubs bieten Antworten auf Anrufe, die während des Tests gemacht wurden, und antworten in der Regel überhaupt nicht auf alles, was sich außerhalb des für den Test programmierten Tests befindet. Stubs können auch Informationen zu Anrufen aufzeichnen, z. B. einen E-Mail-Gateway-Stub, der die von ihm gesendeten Nachrichten speichert, oder nur, wie viele Nachrichten er gesendet hat.
  • Über Mocks sprechen wir hier: Objekte, die mit Erwartungen vorprogrammiert sind und eine Spezifikation der Anrufe enthalten, die sie erwarten sollen.

Um es in meinen eigenen Worten auszudrücken: Scheinobjekte erwarten "bestimmte" Methoden, die für sie aufgerufen werden, und bewirken normalerweise, dass ein Komponententest fehlschlägt, wenn ihre Erwartungen nicht erfüllt werden. Stub-Objekte stellen festgelegte Antworten bereit (und können automatisch durch Hilfsbibliotheken generiert werden), aber in der Regel führen not direkt dazu, dass der Komponententest fehlschlägt. Sie werden normalerweise nur verwendet, damit das zu testende Objekt die Daten erhält, die es für seine Arbeit benötigt.

95
Ross

Ein "Stub" ist eine Implementierung einer Schnittstelle, die vorhanden ist, um Daten/eine Antwort irgendeiner Art bereitzustellen. Zum Beispiel:

  • ein DataSet
  • liste der Benutzer
  • eine XML-Datei

Normalerweise würde dies von einem anderen Dienst bereitgestellt werden (sei es ein Webdienst, eine andere Anwendung, eine Datenbank). Um jedoch die Testbarkeit des Codes zu verbessern, werden die Ergebnisse "gefälscht".

Dies hat den großen Vorteil, dass Aussagen zu Komponententests basierend auf den erwarteten Daten gemacht werden können. Wenn Fehler aufgrund von Datenfehlern auftreten, können Tests leicht hinzugefügt, ein neuer Stub erstellt (Datenfehler repliziert) und Code erstellt werden, um den Fehler zu beheben.

Stubs unterscheiden sich von Mocks dadurch, dass sie den state eines Objekts darstellen und testen, während ein Mock seine Interaktion testet.

28
Rob Cooper

Ich glaube "Stub" kommt von STartUpBlock. Es wird verwendet, um auf Teile des Codes zu verweisen, die automatisch generiert werden, um Sie als Entwickler zu unterstützen.

8
Kris

Eine "Stub" - oder "Stub-Methode" ist als Startercode oder temporärer Ersatz für noch zu entwickelnden Code konzipiert. Es ist ein integrierter Code, der von einer IDE generiert wird. Stub-Methoden sind eigentlich Methoden, die zum Testen von Methoden einer bestimmten Klasse verwendet werden. Es wird verwendet, indem Sie einige Werte für die lokalen Variablen in Ihre tatsächlichen Entwicklungsmethoden eingeben und prüfen, ob die Ausgabe korrekt ist. Es ist wichtig, um Fehler in Ihrem Code zu finden.

1
Nasserr

Nach einigen Nachforschungen und basierend auf Stub-Dateien, denen ich während meines Codierlebens begegnet bin, würde ich sagen, dass eine Stub-Datei nur eine Datei ist, die eine vollständige oder einen Teil der Implementierung einer Datei enthält. Es hilft Entwicklern, mit dem Programmieren zu beginnen.

0
Deric Lima

Ich stellte mich kürzlich der Frage und erkannte, dass dieser Vergleich zwischen Stub und Driver wirklich klar und hilfreich ist:

Im Grunde sind Stubs und Treiber Routinen, die eigentlich nichts tun, außer sich selbst und die von ihnen akzeptierten Parameter zu deklarieren. Der Rest des Codes kann dann diese Parameter übernehmen und als Eingabe verwenden. 

 + --------- + ------------------------------- + ---- --------------------------- + 
 | | Stub | Treiber | 
 + --------- + ------------------------------- + - ----------------------------- + 
 | Typ | Dummy-Codes | Dummy-Codes | 
 + --------- + ------------------------------- + - ------------------------------ + 
 | Wird in | verwendet Integration von oben nach unten | Bottom-Up-Integration | 
 + --------- + ------------------------------- + ------------------------------- + 
 | Zweck | Zum Testen des oberen | Testen des unteren | 
 | | Ebenen des Codes, wenn die | Ebenen des Codes, wenn die | 
 | | niedrigere Ebenen des Codes sind | Die oberen Ebenen des Codes sind | 
 | | noch nicht entwickelt. | noch nicht entwickelt. | 
 + --------- + ------------------------------- + --- ---------------------------- + 
 | Beispiel | A und B sind Komponenten. | A und B sind Komponenten. | 
 | | A ---> B | A ---> B | 
 | | | | 
 | | A wurde entwickelt. | A muss noch entwickelt werden. | 
 | | B muss noch entwickelt werden. | B wurde entwickelt. | 
 | | Daher wird Stub | verwendet Daher wird der Treiber | 
 | Verwendet | anstelle von B, um es nachzuahmen. | anstelle von A, um es nachzuahmen | 
 | | | | 
 | | A ---> Stub | Treiber ---> B | 
 + --------- + ----------------------------- - + --------------------------- + 

Von Unterschied zwischen Stub und Treiber

0
Vahid Hallaji