亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Heim Web-Frontend js-Tutorial Vor TDD: Warum müssen Sie wissen, was Mocks, Stubs und Spies sind?

Vor TDD: Warum müssen Sie wissen, was Mocks, Stubs und Spies sind?

Jan 10, 2025 am 09:23 AM

Before TDD: Why you need to know what Mocks, Stubs, and Spies are?

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!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1488
72
Wie stelle ich eine HTTP -Anforderung in node.js? Wie stelle ich eine HTTP -Anforderung in node.js? Jul 13, 2025 am 02:18 AM

Es gibt drei g?ngige M?glichkeiten, HTTP-Anforderungen in Node.js zu initiieren: Verwenden Sie integrierte Module, Axios und Knotenfetch. 1. Verwenden Sie das integrierte HTTP/HTTPS-Modul ohne Abh?ngigkeiten, das für grundlegende Szenarien geeignet ist, jedoch eine manuelle Verarbeitung von Datengen?hten und Fehlerüberwachung erfordert, z. 2.Axios ist eine auf Versprechen basierende Bibliothek von Drittanbietern. Es verfügt über eine kurze Syntax und leistungsstarke Funktionen, unterstützt Async/Auseait, automatische JSON -Konvertierung, Interceptor usw. Es wird empfohlen, asynchrone Anforderungsvorg?nge zu vereinfachen. 3.Node-Fetch bietet einen Stil ?hnlich dem Browser-Abruf, basierend auf Versprechen und einfacher Syntax

JavaScript -Datentypen: Primitive VS -Referenz JavaScript -Datentypen: Primitive VS -Referenz Jul 13, 2025 am 02:43 AM

JavaScript -Datentypen sind in primitive Typen und Referenztypen unterteilt. Zu den primitiven Typen geh?ren String, Anzahl, Boolesche, Null, undefiniertes und Symbol. Die Werte sind unver?nderlich und Kopien werden bei der Zuweisung von Werten kopiert, sodass sie sich nicht gegenseitig beeinflussen. Referenztypen wie Objekte, Arrays und Funktionen speichern Speicheradressen, und Variablen, die auf dasselbe Objekt zeigen, wirkt sich gegenseitig aus. Typeof und Instanz k?nnen verwendet werden, um die Typen zu bestimmen, aber auf die historischen Probleme der TypeOfnull zu achten. Das Verst?ndnis dieser beiden Arten von Unterschieden kann dazu beitragen, einen stabileren und zuverl?ssigeren Code zu schreiben.

React vs Angular vs Vue: Welches JS -Framework ist am besten? React vs Angular vs Vue: Welches JS -Framework ist am besten? Jul 05, 2025 am 02:24 AM

Welches JavaScript -Framework ist die beste Wahl? Die Antwort besteht darin, die am besten geeigneten nach Ihren Bedürfnissen zu w?hlen. 1.React ist flexibel und kostenlos und für mittlere und gro?e Projekte geeignet, für die hohe Anpassungs- und Teamarchitekturf?higkeiten erforderlich sind. 2. Angular bietet vollst?ndige L?sungen, die für Anwendungen auf Unternehmensebene und langfristige Wartung geeignet sind. 3.. Vue ist einfach zu bedienen, geeignet für kleine und mittlere Projekte oder schnelle Entwicklung. Unabh?ngig davon, ob es einen technologischen Stack, die Teamgr??e, der Projektlebenszyklus gibt und ob SSR erforderlich ist, sind auch wichtige Faktoren für die Auswahl eines Rahmens. Kurz gesagt, es gibt keinen absolut besten Rahmen, die beste Wahl ist die, die Ihren Bedürfnissen entspricht.

JavaScript Time Object, jemand erstellt eine EACTEXE, schnellere Website auf Google Chrome usw. JavaScript Time Object, jemand erstellt eine EACTEXE, schnellere Website auf Google Chrome usw. Jul 08, 2025 pm 02:27 PM

Hallo, JavaScript -Entwickler! Willkommen in den JavaScript -Nachrichten dieser Woche! Diese Woche konzentrieren wir uns auf: Oracas Markenstreit mit Deno, neue JavaScript -Zeitobjekte werden von Browsern, Google Chrome -Updates und einigen leistungsstarken Entwickler -Tools unterstützt. Fangen wir an! Der Markenstreit von Oracle mit dem Versuch von Deno Oracle, ein "JavaScript" -Marke zu registrieren, hat Kontroversen verursacht. Ryan Dahl, der Sch?pfer von Node.js und Deno, hat eine Petition zur Absage der Marke eingereicht, und er glaubt, dass JavaScript ein offener Standard ist und nicht von Oracle verwendet werden sollte

Was ist die Cache -API und wie wird sie bei Dienstangestellten verwendet? Was ist die Cache -API und wie wird sie bei Dienstangestellten verwendet? Jul 08, 2025 am 02:43 AM

Cacheapi ist ein Tool, das der Browser zur Cache -Netzwerkanfragen bereitstellt, das h?ufig in Verbindung mit dem Servicearbeiter verwendet wird, um die Leistung der Website und die Offline -Erfahrung zu verbessern. 1. Es erm?glicht Entwicklern, Ressourcen wie Skripte, Stilbl?tter, Bilder usw. Zu speichern; 2. Es kann die Cache -Antworten entsprechend den Anfragen übereinstimmen. 3. Es unterstützt das L?schen bestimmter Caches oder das L?schen des gesamten Cache. 4.. Es kann Cache -Priorit?ts- oder Netzwerkpriorit?tsstrategien durch Servicearbeiter implementieren, die sich auf Fetch -Ereignisse anh?ren. 5. Es wird h?ufig für die Offline -Unterstützung verwendet, die wiederholte Zugriffsgeschwindigkeit, die Vorspannungs -Schlüsselressourcen und den Inhalt des Hintergrundaktualisierungss beschleunigen. 6. Wenn Sie es verwenden, müssen Sie auf die Cache -Versionskontrolle, Speicherbeschr?nkungen und den Unterschied zum HTTP -Caching -Mechanismus achten.

Handlingversprechen: Verkettung, Fehlerbehandlung und Versprechenkombinatoren in JavaScript Handlingversprechen: Verkettung, Fehlerbehandlung und Versprechenkombinatoren in JavaScript Jul 08, 2025 am 02:40 AM

Versprechen ist der Kernmechanismus für den Umgang mit asynchronen Operationen in JavaScript. Das Verst?ndnis von Kettenanrufen, Fehlerbehebung und Kombination ist der Schlüssel zum Beherrschen ihrer Anwendungen. 1. Der Kettenaufruf gibt ein neues Versprechen durch .then () zurück, um asynchrone Prozessverkampferung zu realisieren. Jeder. Dann () erh?lt das vorherige Ergebnis und kann einen Wert oder ein Versprechen zurückgeben; 2. Die Fehlerbehandlung sollte .Catch () verwenden, um Ausnahmen zu fangen, um stille Ausf?lle zu vermeiden, und den Standardwert im Fang zurückgeben, um den Prozess fortzusetzen. 3. Combinatoren wie Promise.All () (erfolgreich erfolgreich erfolgreich nach allen Erfolg), Versprechen.Race () (Die erste Fertigstellung wird zurückgegeben) und Versprechen.Allsettled () (Warten auf alle Fertigstellungen)

Nutzung von Array.Prototyp -Methoden zur Datenmanipulation in JavaScript Nutzung von Array.Prototyp -Methoden zur Datenmanipulation in JavaScript Jul 06, 2025 am 02:36 AM

JavaScript-Array-integrierte Methoden wie .Map (), .filter () und .Reduce () k?nnen die Datenverarbeitung vereinfachen. 1) .Map () wird verwendet, um Elemente eins in eins um Neuarrays zu konvertieren; 2) .Filter () wird verwendet, um Elemente durch Bedingung zu filtern; 3) .Reduce () wird verwendet, um Daten als einzelner Wert zu aggregieren; Missbrauch sollte bei der Verwendung vermieden werden, was zu Nebenwirkungen oder Leistungsproblemen führt.

JS Roundup: Ein tiefes Eintauchen in die JavaScript -Ereignisschleife JS Roundup: Ein tiefes Eintauchen in die JavaScript -Ereignisschleife Jul 08, 2025 am 02:24 AM

Die Ereignisschleife von JavaScript verwaltet asynchrone Vorg?nge, indem sie Call -Stapel, Webapis und Task -Warteschlangen koordinieren. 1. Der Anrufstack führt synchronen Code aus, und wenn er auf asynchrone Aufgaben begegnet, wird er zur Verarbeitung an Webapi übergeben. 2. Nachdem das Webapi die Aufgabe im Hintergrund abgeschlossen hat, wird der Rückruf in die entsprechende Warteschlange (Makroaufgabe oder Micro -Aufgabe) eingebaut. 3. Die Ereignisschleife prüft, ob der Anrufstapel leer ist. Wenn es leer ist, wird der Rückruf aus der Warteschlange herausgenommen und zur Ausführung in den Anrufstapel geschoben. V. 5. Das Verst?ndnis der Ereignisschleife hilft zu vermeiden, den Haupt -Thread zu blockieren und die Codeausführungsreihenfolge zu optimieren.

See all articles