Was bedeutet es zum Beispiel in diesem Zitat?
Die Integration in eine externe API ist fast eine Garantie für jede moderne Web-App. Um eine solche Integration effektiv zu testen, müssen Sie sie auslöschen . Ein guter Stub sollte einfach zu erstellen und stets auf dem neuesten Stand der aktuellen API-Antworten sein. In diesem Beitrag beschreiben wir eine Teststrategie mit Stubs für eine externe API.
Antworten:
Ein Stub ist ein steuerbarer Ersatz für eine vorhandene Abhängigkeit (oder einen Mitarbeiter) im System. Mithilfe eines Stubs können Sie Ihren Code testen, ohne sich direkt mit der Abhängigkeit zu befassen.
Externe Abhängigkeit - Bestehende Abhängigkeit:
Es handelt sich um ein Objekt in Ihrem System, mit dem Ihr zu testender Code interagiert und über das Sie keine Kontrolle haben. (Häufige Beispiele sind Dateisysteme, Threads, Speicher, Zeit usw.)
Beispiel im folgenden Code:
Sie möchten die mailService.SendEMail () -Methode testen. Dazu müssen Sie jedoch eine Ausnahme in Ihrer Testmethode simulieren. Sie müssen also nur ein Fake Stub errorService- Objekt erstellen , um das gewünschte Ergebnis zu simulieren. Dann lautet Ihr Testcode kann die mailService.SendEMail () -Methode testen . Wie Sie sehen, müssen Sie ein Ergebnis simulieren, das aus einer anderen Abhängigkeit stammt, nämlich dem ErrorService- Klassenobjekt (vorhandenes Abhängigkeitsobjekt).
quelle
Ein Stub bedeutet in diesem Zusammenhang eine Scheinimplementierung.
Das heißt, eine einfache, gefälschte Implementierung, die der Schnittstelle entspricht und zum Testen verwendet werden soll.
quelle
Laut Laienbegriffen handelt es sich um Dummy-Daten (oder gefälschte Daten, Testdaten usw.), Mit denen Sie Ihren Code testen oder entwickeln können, bis Sie (oder die andere Partei) bereit sind, echte Daten zu präsentieren / zu empfangen. Es ist das "Lorem Ipsum" eines Programmierers.
Mitarbeiterdatenbank nicht bereit? Machen Sie eine einfache mit Jane Doe, John Doe ... etc. API nicht bereit? Erstellen Sie eine gefälschte .json-Datei, die gefälschte Daten enthält.
quelle
In diesem Zusammenhang wird das Wort "Stub" anstelle von "Mock" verwendet. Aus Gründen der Klarheit und Präzision sollte der Autor jedoch "Mock" verwenden, da "Mock" eine Art Stub ist, jedoch nur zum Testen. Um weitere Verwirrung zu vermeiden, müssen wir definieren, was ein Stub ist.
Im allgemeinen Kontext ist ein Stub ein Programmteil (normalerweise eine Funktion oder ein Objekt), das die Komplexität des Aufrufs eines anderen Programms (normalerweise auf einem anderen Computer, einer anderen VM oder einem anderen Prozess) zusammenfasst - aber nicht immer kann es auch ein lokales sein Objekt). Da sich das tatsächlich aufzurufende Programm normalerweise nicht auf demselben Speicherplatz befindet, erfordert das Aufrufen viele Vorgänge wie Adressieren, Ausführen des eigentlichen Remote-Aufrufs, Marshalling / Serialisieren der zu übergebenden Daten / Argumente (und dasselbe mit dem potenziellen Ergebnis). Vielleicht sogar mit Authentifizierung / Sicherheit und so weiter. Beachten Sie, dass Stubs in einigen Kontexten auch als Proxys bezeichnet werden (z. B. dynamische Proxys in Java).
Ein Mock ist eine sehr spezifische und restriktive Art von Stub, da ein Mock ein Ersatz für eine andere Funktion oder ein anderes Objekt zum Testen ist. In der Praxis verwenden wir häufig Mocks als lokale Programme (Funktionen oder Objekte), um ein Remote-Programm in der Testumgebung zu ersetzen. In jedem Fall kann der Mock das tatsächliche Verhalten des ersetzten Programms in einem eingeschränkten Kontext simulieren.
Die bekanntesten Arten von Stubs sind offensichtlich für die verteilte Programmierung vorgesehen, wenn Remoteprozeduren ( RPC ) oder Remoteobjekte ( RMI , CORBA ) aufgerufen werden müssen . Die meisten verteilten Programmierframeworks / -bibliotheken automatisieren die Generierung von Stubs, sodass Sie sie nicht manuell schreiben müssen. Stubs können aus einer Schnittstellendefinition generiert werden, die beispielsweise mit IDL geschrieben wurde (Sie können jedoch auch eine beliebige Sprache zum Definieren von Schnittstellen verwenden).
Typischerweise unterscheidet man in RPC, RMI, CORBA usw. clientseitige Stubs , die sich hauptsächlich um das Marshalling / Serialisieren der Argumente und das Ausführen des Remote - Aufrufs kümmern , und serverseitige Stubs , die sich hauptsächlich um das Unmarshaling / Deserialisieren kümmern die Argumente und führen tatsächlich die Remote-Funktion / Methode aus. Offensichtlich befinden sich Client-Stubs auf der Client-Seite, während sich mehrere Stubs (häufig als Skelette bezeichnet) auf der Server-Seite befinden.
Das Schreiben guter, effizienter und allgemeiner Stubs wird beim Umgang mit Objektreferenzen zu einer großen Herausforderung. Die meisten Frameworks für verteilte Objekte wie RMI und CORBA befassen sich mit Verweisen auf verteilte Objekte, aber das vermeiden die meisten Programmierer beispielsweise in REST-Umgebungen. In REST-Umgebungen führen JavaScript-Programmierer normalerweise einfache Stub-Funktionen aus, um die AJAX-Aufrufe zu kapseln (Objektserialisierung wird von
JSON.parse
und unterstütztJSON.stringify
). Das Swagger Codegen- Projekt bietet umfassende Unterstützung für die automatische Generierung von REST-Stubs in verschiedenen Sprachen.quelle
Sie haben auch ein sehr gutes Test-Framework, um einen solchen Stub zu erstellen. Einer meiner Favoriten ist Mockito. Es gibt auch EasyMock und andere ... Aber Mockito ist großartig, Sie sollten es lesen - ein sehr elegantes und leistungsstarkes Paket
quelle
Stub ist eine Funktionsdefinition, die den richtigen Funktionsnamen und die richtige Anzahl von Parametern hat und ein Dummy-Ergebnis des richtigen Typs erzeugt.
Es hilft beim Schreiben des Tests und dient als eine Art Gerüst, damit die Beispiele ausgeführt werden können, noch bevor der Funktionsentwurf abgeschlossen ist
quelle
Dieser Satz ist mit ziemlicher Sicherheit eine Analogie zu einer Phase im Hausbau - dem "Ausstechen" von Rohrleitungen. Während des Baus, während die Wände noch offen sind, werden die rauen Leitungen eingebaut. Dies ist notwendig, damit der Bau fortgesetzt werden kann. Wenn dann alles fertig ist, kommt man zurück und fügt Wasserhähne und Toiletten sowie das eigentliche Endprodukt hinzu. (Siehe zum Beispiel So installieren Sie einen Sanitär-Stub-Out .)
Wenn Sie eine Funktion in der Programmierung "stubben", erstellen Sie genug davon, um sie zu umgehen (zum Testen oder zum Schreiben von anderem Code). Dann kommen Sie später zurück und ersetzen es durch die vollständige Implementierung.
quelle
RPC Stubs
Quelle
quelle
"Wenn Sie eine Funktion auslöschen, schreiben Sie nur genug, um zu zeigen, dass die Funktion aufgerufen wurde, und lassen die Details für später, wenn Sie mehr Zeit haben."
Von: SAMS Bringen Sie sich C ++, Jesse Liberty und Bradley Jones bei
quelle