Was bedeutet Stubbing in der Programmierung?


Antworten:


30

Eine Stub-Methode ist eine Methode, die nur ein einfaches, aber gültiges (wenn auch nicht notwendigerweise korrektes) Ergebnis zurückgibt.

Sie werden in der Regel beim Aufbau der Infrastruktur erstellt, und Sie möchten jetzt nicht für jede erforderliche Methode Zeit aufwenden. Stattdessen erstellen Sie Stubs, damit alles kompiliert wird und die automatische Vervollständigung Ihrer IDE über die Methoden informiert ist, die Sie verwenden möchten.

Eine andere Stelle, an der Stubs verwendet werden, ist das Verspotten beim Testen. Sie geben Stub-Methoden anstelle der normalen Abhängigkeit durch Abhängigkeitsinjektion an, die feste Ergebnisse zurückgeben und dann sicherstellen, dass der Code das Richtige mit ihnen tut. Dies isoliert das Testen auf den Code, den Sie testen möchten, und bedeutet, dass Sie keine Datenbank hochfahren müssen, um diese Tests auszuführen.


3
Nitpick: Stubs werden beim Stubben verwendet, nicht beim Verspotten. Beim Verspotten benutzt du Verspottungen. martinfowler.com/articles/mocksArentStubs.html
Jörg W Mittag

+1 für das oben Gesagte, aber ich möchte hinzufügen, dass es hilfreich sein kann, wenn Stubs eine Ausnahme auslösen oder auf andere Weise zu einem Fehler führen, wenn Sie nicht damit rechnen, dass die Stub-Methoden noch verwendet werden. Beispiel "NotImplementedException": msdn.microsoft.com/en-us/library/… commons.apache.org/proper/commons-lang/javadocs/api-release/org/…
Dan Armstrong

6

Vielleicht lässt sich dies am besten mit einem konkreten Beispiel beantworten. Betrachten wir den Fall, in dem Sie eine Desktop-Anwendung erstellen. Sie haben beschlossen , eine Funktion mit dem Namen zu haben createMenubar, createToolbarund createMainso , dass Ihre Anwendung Konstruktor ist sauber und ordentlich.

Ihr Hauptcode sieht ungefähr so ​​aus (dieses Beispiel ist in Python):

class ExampleApp():
    def __init__(self):
        self.createMenubar()
        self.createToolbar()
        self.createMain()

Solange nicht alles funktioniert, schlägt Ihre Hauptfunktion fehl. Wie können Sie Ihre App während der Entwicklung testen? Wenn Sie beispielsweise mit der Arbeit beginnen, createMenubarschlägt die Initialisierung fehl, nachdem die Menüleiste erstellt wurde, da Sie die Symbolleiste oder den Hauptbereich der GUI nicht implementiert haben.

Dies ist , wo Stubs kommen in. Sie eine Funktion mit dem Namen erstellen können , createToolbarund createMaindass die Anforderung erfüllen , des App - Konstruktor (nämlich , dass diese Funktionen vorhanden ist ), ohne sie tatsächlich umsetzen zu müssen. Diese Funktionen sind Stubs:

def createToolbar():
    pass

def createMain():
    pass

Mit diesen Stubs können Sie mit der Implementierung des Hauptprogramms und der Menüleiste beginnen, ohne sich um die Details der Symbolleiste oder des Hauptteils des Programms kümmern zu müssen. Schließlich wechseln Sie zur Symbolleiste und ersetzen den Stub durch die eigentliche Funktion. Und zum Schluss entfernen Sie den Stub für createMaineine echte Implementierung.

Beachten Sie, dass Stubs nicht unbedingt nichts tun müssen. Diese Stubs könnten beispielsweise ein leeres Container-Widget erstellen, das der App-Konstruktor anordnen kann. Der Punkt ist, dass Sie Dummy-Funktionen oder -Objekte erstellen, die gerade so viel bewirken, dass der andere Code ausgeführt wird, während Sie ihn entwickeln. Im Laufe der Zeit tauschen Sie die Stubs nacheinander aus, bis Ihre Bewerbung vollständig ist.


2

Bei der Programmierung von oben nach unten wird ein "Stich" verwendet. In diesem Moment erstellen Sie Ihre Anwendung vom Allgemeinen zum Besonderen. Dabei verwenden Sie "Stubs" als "Platzhalter" für die spezifischen Anwendungen, für deren Erstellung Sie keine Zeit hatten. Sie geben häufig Dinge wie Dummy- oder Zufallswerte an den allgemeineren Teil des Programms zurück. Das ist in Ordnung, der Stub liefert genug Wert, um den "erfahreneren" Teil des Programms zum Laufen zu bringen. Bis es Zeit ist, dass der Stummel ersetzt oder mit seiner wahren Berechnung oder seinem Wert ausgestattet wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.