Hallo zusammen! Heute bringe ich ein Thema vor, das meiner Meinung nach sehr interessant ist. Ich wei?, dass es online Dutzende von Artikeln gibt, die sich mit TDD, BDD, Entwurfsmustern für Tests, dem Schreiben von Tests und vielen anderen verwandten Themen befassen. Allerdings sehe ich nur sehr wenige Artikel, die grundlegendere Begriffe im Testuniversum erkl?ren – jene Funktionen, die wir h?ufig verwenden, von denen wir jedoch nicht immer vollst?ndig verstehen, was sie bedeuten oder wie sie sich verhalten. Wenn Sie gerade erst anfangen, etwas über das Testen zu lernen, und nicht genau wissen, was die Bibliotheksfunktionen bewirken, ist dieser Artikel genau das Richtige für Sie. Viel Spa? beim Lesen!
Was sind Mocks?
Das Erste, worauf Sie sto?en k?nnten, sobald Sie mit dem Schreiben von Tests beginnen, sind Mocks. Manchmal verwendet man sie bereits, wei? aber nicht genau, was sie bedeuten. Also, lasst uns eintauchen.
Mocks werden haupts?chlich beim Unit-Testen verwendet. Hierbei handelt es sich um Tools zur Simulation von Inhalten, Objekten oder Antworten, die normalerweise aus einer externen Abh?ngigkeit stammen oder wenn der Inhalt bestimmte Informationen enthalten muss.
Stellen Sie sich vor, Sie testen ein Filmempfehlungssystem. Dieses System ruft eine Liste von Filmen von einer API ab und sendet sie an Sie zurück.
Das Problem ist: Wenn jedes Mal, wenn Sie die Tests ausführen, die echte API aufgerufen wird, k?nnte diese langsam und inkonsistent sein (Filme k?nnen variieren oder die API k?nnte ausfallen), was die Tests unzuverl?ssig macht.
Okay, Leo, ich verstehe das Problem, aber wie l?st ein Mock das? Nun, es ist ganz einfach: Anstatt die API aufzurufen, verwenden Sie deren Antwort als statische Liste von Filmen. Es handelt sich im Grunde genommen um eine ?F?lschung“ der API-Antwort mit dieser Filmliste.
Wenn Sie im Beispiel des Filmsystems eine Funktion namens fetchMoviesFromAPI() testen m?chten, die die API zum Abrufen von Filmen verwendet, k?nnen Sie eine Simulation erstellen, um die API-Antwort wie folgt zu simulieren:
// This is the mock const MOVIES_FROM_API = [ { id: 1, name: "Interstellar" }, { id: 2, name: "Nosferatu" } ] // Here, we’re telling fetchMoviesFromAPI to return our mock instead of calling the real API. This is a stub, which you’ll learn about in the next section. const fetchMoviesFromAPI = jest.fn().mockResolvedValue(MOVIES_FROM_API) ;(async () => { { const expectedMovies = MOVIES_FROM_API const movies = await fetchMoviesFromAPI() expect(movies).toEqual(MOVIES_FROM_API) } })()
Mit Mocks werden Ihre Tests effizienter, da sie nicht von externen Diensten abh?ngig sind. Darüber hinaus gewinnen sie an Zuverl?ssigkeit, da Sie die volle Kontrolle über die Ertr?ge haben, sodass Sie sich weiterhin auf die Validierung der Funktionalit?t konzentrieren k?nnen, ohne sich über m?gliche API-Instabilit?ten oder Ausfallzeiten Gedanken machen zu müssen.
Mocks sind statische Objekte, die Antworten von Anrufen oder anderen zum Testen ben?tigten Objekten simulieren.
Letztendlich ist es so, als würde man ein Auto testen, ohne echtes Benzin zu verwenden. Sie schaffen eine kontrollierte Umgebung, um sicherzustellen, dass der Motor funktioniert, bevor Sie ihn auf die Stra?e bringen.
Ich bekomme Mocks, was sind nun Stubs?
Stubs sind ebenfalls Testwerkzeuge, dienen aber einem etwas anderen Zweck. Sie ersetzen das Verhalten von Funktionen durch etwas Vorgegebenes und verwenden oft Mocks, um bestimmte Werte zurückzugeben.
Stubs ersetzen das Verhalten der Funktion. Wenn ich beispielsweise auf diese Film-API zugreife, führt die Funktion nicht den eigentlichen Aufruf aus, sondern schaut sich unser Mock (die statische Liste der Filme) an.
Sie dienen auch als Erinnerung daran, dass unsere Tests nicht von externen Diensten oder dem Internet abh?ngig sein sollten.
Lassen Sie mich Ihnen etwas Kontext geben: Stellen Sie sich vor, Sie testen eine Anwendung, die den Gesamtwert eines Online-Kaufs berechnet. Die Berechnung berücksichtigt Gebühren, die von einem externen Dienst erhoben werden. Jedes Mal, wenn Sie den Test ausführen, muss diese Berechnung durchgeführt werden, was bedeutet, dass der externe Dienst aufgerufen werden muss. Dies k?nnte zu einem langsamen, instabilen, kostspieligen (da der externe Dienst m?glicherweise Gebühren pro Anfrage berechnet) und inkonsistenten Test (Werte k?nnten sich ?ndern) führen.
Mit einem Stub ersetzen Sie den echten Serviceaufruf durch einen festen, vordefinierten Wert (ja, einen Schein). Anstatt den Gebührenservice anzurufen, sagen Sie: ?Als Gebühr immer den Wert 10 zurückgeben.“
Stellen Sie sich vor, Sie m?chten die Funktion berechnenTotalPurchase() testen, die die Werte der Warenkorbartikel summiert und die Versandkosten hinzufügt. Mithilfe von Stubs ersetzen Sie den Versandkostenservice durch einen Wert, der als Versandkosten immer ?10“ zurückgibt. So:
// This is the mock const MOVIES_FROM_API = [ { id: 1, name: "Interstellar" }, { id: 2, name: "Nosferatu" } ] // Here, we’re telling fetchMoviesFromAPI to return our mock instead of calling the real API. This is a stub, which you’ll learn about in the next section. const fetchMoviesFromAPI = jest.fn().mockResolvedValue(MOVIES_FROM_API) ;(async () => { { const expectedMovies = MOVIES_FROM_API const movies = await fetchMoviesFromAPI() expect(movies).toEqual(MOVIES_FROM_API) } })()
Dies vereinfacht den Test und gew?hrleistet seine Reproduzierbarkeit, sodass er immer auf die gleiche Weise funktioniert. Darüber hinaus helfen Stubs dabei, den Test zu isolieren, sodass Sie sich keine Gedanken über den Status oder die Verfügbarkeit der Gebühren-API machen müssen.
Zusammenfassend l?sst sich sagen, dass es so ist, als würde man ein Kuchenrezept mit einem Messbecher testen, auf dem immer 200 ml Milch stehen, anstatt die tats?chliche Milchmenge abzumessen. Auf diese Weise testen Sie nur, ob Sie die Zutaten mischen k?nnen, ohne sich Gedanken darüber machen zu müssen, ob die Milch richtig abgemessen wird.
Spott, Stubs ... und schlie?lich: Was sind Spione?
Wir haben Mocks untersucht, die Objekte simulieren, und Stubs, die Funktionsverhalten nachahmen. Lassen Sie uns nun über Spione sprechen: Was genau machen sie?
Spies überwachen Funktionen und zeichnen auf, wie oft sie aufgerufen wurden, welche Parameter sie erhielten und die Ergebnisse jeder Ausführung. Sie erm?glichen es Ihnen, das Verhalten der Funktion zu beobachten, ohne sie zu ?ndern, und stellen so sicher, dass alles wie erwartet funktioniert.
Stellen Sie sich vor, Sie testen das Benachrichtigungsmodul Ihres Projekts. Jedes Mal, wenn eine Bestellung abgeschlossen ist, sollte das System eine Nachricht an den Kunden senden und einen Eintrag protokollieren. In diesem Fall m?chten Sie nur sicherstellen, dass diese Aktionen ausgeführt werden, aber keine davon ersetzen. Mit einem Spion überwachen Sie diese Funktionen, ohne ihr Verhalten zu ?ndern. Dadurch k?nnen Sie Folgendes sehen:
- Wenn die Funktion aufgerufen wurde
- Wie oft wurde es aufgerufen
- Welche Argumente es erhalten hat
Wenn Sie beispielsweise die Funktion ?completeOrder()“, die eine Benachrichtigung an den Kunden sendet und den Eintrag protokolliert, mit einem Spion testen m?chten, k?nnen Sie Folgendes überprüfen:
- Wenn die Benachrichtigungsfunktion aufgerufen wurde
- Wenn die Protokollfunktion aufgerufen wurde
- Welche Argumente diese Funktionen erhalten haben.
// This is the mock const MOVIES_FROM_API = [ { id: 1, name: "Interstellar" }, { id: 2, name: "Nosferatu" } ] // Here, we’re telling fetchMoviesFromAPI to return our mock instead of calling the real API. This is a stub, which you’ll learn about in the next section. const fetchMoviesFromAPI = jest.fn().mockResolvedValue(MOVIES_FROM_API) ;(async () => { { const expectedMovies = MOVIES_FROM_API const movies = await fetchMoviesFromAPI() expect(movies).toEqual(MOVIES_FROM_API) } })()
Zusammenfassend l?sst sich sagen, dass es so ist, als würde man eine Kamera aufstellen, um zu beobachten, was ein Koch in der Küche tut. Sie mischen sich nicht in das ein, was sie tun. überprüfen Sie einfach, ob das Rezept korrekt befolgt wird.
So, das ist es! Sie haben die Begriffe Mocks, Stubs und Spione gelernt und verstanden, die grundlegende Elemente für die Erstellung zuverl?ssiger und effizienter Tests sind. Jetzt k?nnen Sie Ihr Studium weiter vertiefen. Wir sehen uns dort, auf Wiedersehen!
Das obige ist der detaillierte Inhalt vonVor TDD: Warum müssen Sie wissen, was Mocks, Stubs und Spies sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

Java und JavaScript sind unterschiedliche Programmiersprachen, die jeweils für verschiedene Anwendungsszenarien geeignet sind. Java wird für die Entwicklung gro?er Unternehmen und mobiler Anwendungen verwendet, w?hrend JavaScript haupts?chlich für die Entwicklung von Webseiten verwendet wird.

JavaScriptComents AreseessentialFormaintaining, Lesen und GuidingCodeexexecution.1) einzelne Linecommments Arequickickexplanationen.2) Multi-LindexplainComproxlogicorProvedetailedDocumentation.3) InlinecommentsclarifyspecificPartsosensofCode.BestPracticic

CommentareAtecrucialinjavaScriptFormaintainingClarity und FosteringCollaboration.1) thehelpindebugging, Onboarding, und die Verst?rkung vonCodeevolution.2) Verwendungsle-Linien- und Verst??en für FosterquickexPlanations und Multi-LinecomMentSfordsetaileddescriptions.3) Bestpraktiziert

Die folgenden Punkte sollten bei der Verarbeitung von Daten und Zeiten in JavaScript festgestellt werden: 1. Es gibt viele M?glichkeiten, Datumsobjekte zu erstellen. Es wird empfohlen, ISO -Format -Zeichenfolgen zu verwenden, um die Kompatibilit?t sicherzustellen. 2. Die Zeitinformationen erhalten und festlegen k?nnen und setzen Sie Methoden fest, und beachten Sie, dass der Monat mit 0 beginnt. 3. Die manuell formatierende Daten sind Zeichenfolgen erforderlich, und auch Bibliotheken von Drittanbietern k?nnen verwendet werden. 4. Es wird empfohlen, Bibliotheken zu verwenden, die Zeitzonen wie Luxon unterstützen. Das Beherrschen dieser wichtigen Punkte kann h?ufige Fehler effektiv vermeiden.

JavaScriptispreferredforwebdevelopment,whileJavaisbetterforlarge-scalebackendsystemsandAndroidapps.1)JavaScriptexcelsincreatinginteractivewebexperienceswithitsdynamicnatureandDOMmanipulation.2)Javaoffersstrongtypingandobject-orientedfeatures,idealfor

JavaScripthassevenfundamentaldatatypes:number,string,boolean,undefined,null,object,andsymbol.1)Numbersuseadouble-precisionformat,usefulforwidevaluerangesbutbecautiouswithfloating-pointarithmetic.2)Stringsareimmutable,useefficientconcatenationmethodsf

PlatztagsattheBottomofabogpostorwebpageServeSpracticalPurposesforseo, Usexperience und design.1ithelpswithseobyallowingEnginestoaccessKeyword-relevantTagswithoutClutteringHemainContent.2.

Ereigniserfassung und Blase sind zwei Phasen der Ereignisausbreitung in DOM. Die Erfassung erfolgt von der oberen Schicht bis zum Zielelement, und die Blase ist vom Zielelement bis zur oberen Schicht. 1. Die Ereigniserfassung wird implementiert, indem der UseCapture -Parameter von AddEventListener auf true festgelegt wird. 2. Ereignisblase ist das Standardverhalten, Uscapture ist auf false oder weggelassen. 3. Die Ereignisausbreitung kann verwendet werden, um die Ereignisausbreitung zu verhindern. 4. Event Bubbling unterstützt die Ereignisdelegation, um die Effizienz der dynamischen Inhaltsverarbeitung zu verbessern. 5. Capture kann verwendet werden, um Ereignisse im Voraus abzufangen, wie z. B. Protokollierung oder Fehlerverarbeitung. Das Verst?ndnis dieser beiden Phasen hilft dabei, das Timing und die Reaktion von JavaScript auf Benutzeroperationen genau zu steuern.
