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

Maison interface Web js tutoriel Avant TDD : Pourquoi avez-vous besoin de savoir ce que sont les Mocks, les Stubs et les Spies ?

Avant TDD : Pourquoi avez-vous besoin de savoir ce que sont les Mocks, les Stubs et les Spies ?

Jan 10, 2025 am 09:23 AM

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

Bonjour à tous ! Aujourd’hui, j’apporte un sujet que je trouve très intéressant. Je sais qu'il existe des dizaines d'articles en ligne traitant de TDD, BDD, des modèles de conception pour les tests, de la fa?on d'écrire des tests et de nombreux autres sujets connexes. Cependant, je vois très peu d'articles expliquant des termes plus basiques dans l'univers des tests, ces fonctions que nous utilisons souvent mais dont nous ne comprenons pas toujours pleinement ce qu'elles signifient ou comment elles se comportent. Si vous commencez tout juste à vous renseigner sur les tests et que vous ne savez pas exactement à quoi servent les fonctions de la bibliothèque, cet article est fait pour vous. Bonne lecture?!

Que sont les moqueries ?

La première chose que vous pourriez rencontrer dès que vous commencez à rédiger des tests, ce sont les simulations. Parfois, vous les utilisez déjà mais vous ne savez pas exactement ce qu’ils signifient. Alors, allons-y.

Les simulations sont principalement utilisées dans les tests unitaires. Ce sont des outils utilisés pour simuler du contenu, des objets ou des réponses qui proviennent généralement d'une dépendance externe, ou lorsque vous avez besoin que le contenu contienne des informations spécifiques.

Imaginez que vous testez un système de recommandation de films. Ce système récupère une liste de films à partir d'une API et vous la renvoie.

Le problème est le suivant?: si à chaque fois que vous exécutez les tests, la véritable API est appelée, elle pourrait être lente et incohérente (les films peuvent varier ou l'API peut être en panne), ce qui rend les tests peu fiables.

Très bien, Leo, je comprends le problème, mais comment une simulation résout-elle ce problème??Eh bien, c'est simple?: au lieu d'appeler l'API, vous utilisez sa réponse comme une liste statique de films. Il s’agit essentiellement de ? simuler ? la réponse de l’API avec cette liste de films.

Dans l'exemple du système de films, si vous souhaitez tester une fonction appelée fetchMoviesFromAPI() qui utilise l'API pour récupérer des films, vous pouvez créer une simulation pour simuler la réponse de l'API comme ceci?:

// 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)
    }
})()

Avec les mocks, vos tests deviennent plus efficaces puisqu'ils ne dépendent pas de services externes. De plus, ils gagnent en fiabilité car vous avez un contr?le total sur les retours, ce qui vous permet de vous concentrer sur la validation de la fonctionnalité sans vous soucier des instabilités ou des temps d'arrêt potentiels de l'API.

Les simulations sont des objets statiques qui simulent les réponses aux appels ou à d'autres objets nécessaires aux tests.

En fin de compte, c’est comme tester une voiture sans utiliser de vraie essence. Vous créez un environnement contr?lé pour vous assurer que le moteur fonctionne avant de le mettre sur la route.

Je re?ois des moqueries, maintenant que sont les talons??

Les Stubs sont également des outils de test mais ont un objectif légèrement différent. Ils remplacent le comportement des fonctions par quelque chose de prédéterminé, utilisant souvent des simulations pour renvoyer des valeurs spécifiques.

Les stubs remplacent le comportement de la fonction. Par exemple, lorsque j'accède à cette API de film, la fonction ne fera pas le véritable appel mais examinera notre simulation (la liste statique des films).

Ils rappellent également que nos tests ne doivent pas dépendre de services externes ou d'Internet.

Laissez-moi vous donner un peu de contexte?: imaginez que vous testez une application qui calcule la valeur totale d'un achat en ligne. Le calcul inclut les frais récupérés auprès d’un service externe. Chaque fois que vous exécutez le test, ce calcul doit être effectué, ce qui signifie que le service externe devra être appelé. Cela pourrait entra?ner un test lent, instable, co?teux (car le service externe peut facturer par demande) et incohérent (les valeurs peuvent changer).

à l'aide d'un stub, vous remplacerez le véritable appel de service par une valeur fixe et prédéfinie (oui, une simulation). Au lieu d'appeler le service de frais, vous dites?: ??Renvoyez toujours la valeur 10 comme frais.??

Imaginez que vous souhaitiez tester la fonction calculateTotalPurchase() qui résume les valeurs des articles du panier et ajoute les frais d'expédition. à l’aide de talons, vous remplacez le service de frais d’expédition par une valeur qui renvoie toujours ? 10 ? comme frais d’expédition. Comme ?a?:

// 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)
    }
})()

Cela simplifie le test et garantit sa reproductibilité, ce qui signifie qu'il fonctionnera toujours de la même manière. De plus, les stubs aident à isoler le test, éliminant ainsi le besoin de s'inquiéter de l'état ou de la disponibilité de l'API payante.

En résumé, c'est comme tester une recette de gateau en utilisant un verre doseur qui indique toujours 200 ml de lait au lieu de mesurer la quantité réelle de lait. De cette fa?on, vous testez uniquement si vous pouvez mélanger les ingrédients sans vous soucier de savoir si le lait est mesuré correctement.

Des moqueries, des talons... et enfin, que sont les espions ?

Nous avons exploré les simulations, qui simulent des objets, et les stubs, qui imitent les comportements des fonctions. Parlons maintenant des espions?: que font-ils exactement??

Les espions surveillent les fonctions, enregistrant combien de fois ils ont été appelés, quels paramètres ils ont re?us et les résultats de chaque exécution. Ils vous permettent d'observer le comportement de la fonction sans la modifier, garantissant ainsi que tout fonctionne comme prévu.

Imaginez que vous testez le module de notification de votre projet. Chaque fois qu'une commande est terminée, le système doit envoyer un message au client et enregistrer une entrée. Dans ce cas, vous souhaitez uniquement vous assurer que ces actions sont effectuées, mais vous ne souhaitez en remplacer aucune. Avec un espion, vous surveillez ces fonctions sans altérer leur comportement. Cela vous permet de voir?:

  • Si la fonction a été appelée
  • Combien de fois il a été appelé
  • Quels arguments il a re?u

Par exemple, si vous souhaitez tester la fonction completeOrder() qui envoie une notification au client et enregistre l'entrée, avec un espion, vous pouvez vérifier?:

  • Si la fonction de notification a été appelée
  • Si la fonction de journalisation a été appelée
  • Quels arguments ces fonctions ont re?us.
// 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)
    }
})()

Pour conclure, c’est comme placer une caméra pour observer ce que fait un chef en cuisine. Vous n’interférez pas avec ce qu’ils font?; il vous suffit de vérifier s'ils suivent correctement la recette.

Alors, c'est tout ! Vous avez appris et compris les termes mocks, stubs et espions, qui sont des éléments fondamentaux pour créer des tests fiables et efficaces. Vous pouvez désormais continuer à approfondir vos études. à bient?t, au revoir?!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1488
72
Comment faire une demande HTTP dans Node.js? Comment faire une demande HTTP dans Node.js? Jul 13, 2025 am 02:18 AM

Il existe trois fa?ons courantes d'initier des demandes HTTP dans Node.js: utilisez des modules intégrés, Axios et Node-Fetch. 1. Utilisez le module HTTP / HTTPS intégré sans dépendances, ce qui convient aux scénarios de base, mais nécessite un traitement manuel de la couture des données et de la surveillance des erreurs, tels que l'utilisation de https.get () pour obtenir des données ou envoyer des demandes de post via .write (); 2.AXIOS est une bibliothèque tierce basée sur la promesse. Il a une syntaxe concise et des fonctions puissantes, prend en charge l'async / attendre, la conversion JSON automatique, l'intercepteur, etc. Il est recommandé de simplifier les opérations de demande asynchrones; 3.Node-Fetch fournit un style similaire à la récupération du navigateur, basé sur la promesse et la syntaxe simple

Types de données JavaScript: référence primitive vs Types de données JavaScript: référence primitive vs Jul 13, 2025 am 02:43 AM

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la cha?ne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

React vs Angular vs Vue: Quel framework JS est le meilleur? React vs Angular vs Vue: Quel framework JS est le meilleur? Jul 05, 2025 am 02:24 AM

Quel framework JavaScript est le meilleur choix? La réponse est de choisir la plus appropriée selon vos besoins. 1.RIATT est flexible et gratuit, adapté aux projets moyens et grands qui nécessitent une personnalisation élevée et des capacités d'architecture d'équipe; 2. Angular fournit des solutions complètes, adaptées aux applications au niveau de l'entreprise et à la maintenance à long terme; 3. Vue est facile à utiliser, adaptée à des projets de petite et moyenne taille ou à un développement rapide. De plus, s'il existe une pile technologique existante, la taille de l'équipe, le cycle de vie du projet et si le RSS est nécessaire sont également des facteurs importants dans le choix d'un cadre. En bref, il n'y a pas absolument le meilleur cadre, le meilleur choix est celui qui convient à vos besoins.

Objet JavaScript Time, quelqu'un construit un site Web Eactexe, plus rapide sur Google Chrome, etc. Objet JavaScript Time, quelqu'un construit un site Web Eactexe, plus rapide sur Google Chrome, etc. Jul 08, 2025 pm 02:27 PM

Bonjour, développeurs JavaScript! Bienvenue dans JavaScript News de cette semaine! Cette semaine, nous nous concentrerons sur: le différend de marque d'Oracle avec Deno, les nouveaux objets Time JavaScript sont pris en charge par les navigateurs, les mises à jour Google Chrome et certains outils de développeurs puissants. Commen?ons! Le différend de marque d'Oracle avec la tentative de Deno Oracle d'enregistrer une marque "JavaScript" a provoqué la controverse. Ryan Dahl, le créateur de Node.js et Deno, a déposé une pétition pour annuler la marque, et il pense que JavaScript est un niveau ouvert et ne devrait pas être utilisé par Oracle

Gestion des promesses: cha?nage, gestion des erreurs et combinateurs de promesses en javascript Gestion des promesses: cha?nage, gestion des erreurs et combinateurs de promesses en javascript Jul 08, 2025 am 02:40 AM

La promesse est le mécanisme central pour gérer les opérations asynchrones en JavaScript. Comprendre les appels de cha?ne, la gestion des erreurs et les combinants est la clé pour ma?triser leurs applications. 1. L'appel de la cha?ne renvoie une nouvelle promesse à travers. Puis () pour réaliser la concaténation des processus asynchrones. Chaque .then () re?oit le résultat précédent et peut renvoyer une valeur ou une promesse; 2. La gestion des erreurs doit utiliser .catch () pour attraper des exceptions pour éviter les défaillances silencieuses, et peut renvoyer la valeur par défaut dans Catch pour continuer le processus; 3. Combinateurs tels que promesse.all () (réussi avec succès uniquement après tout succès), promesse.race () (le premier achèvement est retourné) et promesse.allsetTled () (en attente de toutes les achèvements)

Qu'est-ce que l'API Cache et comment est-elle utilisée avec les travailleurs du service? Qu'est-ce que l'API Cache et comment est-elle utilisée avec les travailleurs du service? Jul 08, 2025 am 02:43 AM

Cacheapi est un outil fourni par le navigateur pour mettre en cache les demandes de réseau, qui est souvent utilisée en conjonction avec travailleur de service pour améliorer les performances du site Web et l'expérience hors ligne. 1. Il permet aux développeurs de stocker manuellement des ressources telles que des scripts, des feuilles de style, des photos, etc.; 2. Il peut faire correspondre les réponses du cache en fonction des demandes; 3. Il prend en charge la suppression des caches spécifiques ou la nettoyage du cache entier; 4. Il peut mettre en ?uvre des stratégies de priorité de cache ou de priorité de réseau grace à l'écoute des événements Fetch; 5. Il est souvent utilisé pour le support hors ligne, accélérez la vitesse d'accès répétée, préchargement des ressources clés et du contenu de mise à jour des antécédents; 6. Lorsque vous l'utilisez, vous devez faire attention au contr?le de la version du cache, aux restrictions de stockage et à la différence entre le mécanisme de mise en cache HTTP.

Tire de tirage. Tire de tirage. Jul 06, 2025 am 02:36 AM

Des méthodes intégrées de la matrice JavaScript telles que .map (), .filter () et .reduce () peuvent simplifier le traitement des données; 1) .map () est utilisé pour convertir les éléments un en un pour générer de nouveaux tableaux; 2) .filter () est utilisé pour filtrer les éléments par condition; 3) .reduce () est utilisé pour agréger les données en tant que valeur unique; Une mauvaise utilisation doit être évitée lorsqu'elle est utilisée, entra?nant des effets secondaires ou des problèmes de performance.

JS Roundup: une plongée profonde dans la boucle d'événement JavaScript JS Roundup: une plongée profonde dans la boucle d'événement JavaScript Jul 08, 2025 am 02:24 AM

La boucle d'événement de JavaScript gère les opérations asynchrones en coordonnant les piles d'appels, les webapis et les files d'attente de taches. 1. La pile d'appels exécute du code synchrone, et lors de la rencontre de taches asynchrones, il est remis à WebAPI pour le traitement; 2. Une fois que le WebAPI a terminé la tache en arrière-plan, il met le rappel dans la file d'attente correspondante (macro tache ou micro tache); 3. La boucle d'événement vérifie si la pile d'appels est vide. S'il est vide, le rappel est retiré de la file d'attente et poussé dans la pile d'appels pour l'exécution; 4. Micro taches (comme Promise. puis) ??prendre la priorité sur les taches macro (telles que Settimeout); 5. Comprendre la boucle d'événements permet d'éviter de bloquer le thread principal et d'optimiser l'ordre d'exécution du code.

See all articles