


Comment se moquer d'une classe Python pour les tests unitaires?
Jul 11, 2025 am 02:01 AMLors de la rédaction de tests unitaires pour les classes Python, la technologie simulée peut contourner les dépendances externes et est principalement implémentée à l'aide du module de moque de moque ou de la conduite manuelle. 1. Utilisez unittest.mock.patch pour remplacer un comportement de méthode spécifique, tel que la valeur de retour de la méthode de la classe Mock et vérifiez l'appel; 2. Créez une classe simulée pour remplacer la classe réelle et simuler le comportement global; 3. Utilisez MagicMock pour générer rapidement de fausses données et les utiliser en combinaison avec Patch. Le noyau est d'isoler l'environnement externe par "autonomes" et "Résultats prédéfinis", de sorte que le test se concentre sur la logique elle-même.
Lorsque vous devez rédiger des tests unitaires pour une classe Python, vous rencontrez souvent des situations où vous comptez sur des systèmes externes (tels que des bases de données, des demandes de réseau). à l'heure actuelle, l'utilisation de la technologie simulée peut vous aider à contourner ces appels réels et à mettre le test davantage sur la logique elle-même. Il existe deux fa?ons principales de l'implémenter: utilisez le module unittest.mock
ou conduisez manuellement.

1. Utilisez unittest.mock.patch
pour remplacer la méthode de classe
La fa?on la plus courante est de remplacer le comportement d'une certaine classe ou de la méthode en patch
. Par exemple, vous avez une classe qui dépend d'une API externe:
classe MyService: def fetch_data (self): # La demande HTTP sera en fait lancée pour retourner requêtes.get ("https://api.example.com/data")
Dans le test, vous pouvez se moquer de sa valeur de retour comme ceci:

à partir de unittest.mock Import Patch @patch ('my_module.myservice.fetch_data') def test_fetch_data (mock_fetch): mock_fetch.return_value.status_code = 200 mock_fetch.return_value.json.return_value = {'key': 'value'} service = myService () result = service.fetch_data (). JSON () affirmer le résultat ['key'] == 'valeur'
De cette fa?on, vous souhaitez contr?ler la sortie d'une méthode spécifique sans l'exécuter réellement.
Conseils:
- Si vous souhaitez vérifier que la méthode est appelée, vous pouvez utiliser
assert_called_once_with()
. -
patch
peut décorer les fonctions et les classes, ou utiliser un gestionnaire de contexte danssetUp
. - Notez que le chemin du module doit être écrit correctement, par exemple,
my_module.MyService.fetch_data
doit être cohérent avec le chemin d'importation.
2. Créez une classe simulée pour simuler le comportement des objets
Si vous ne voulez pas simplement se moquer d'une méthode, mais que vous souhaitez simuler le comportement de toute la classe, vous pouvez créer directement une classe simulée pour remplacer la classe réelle:

Class MockDB: def connect (self): Retour vrai Def Query (self, SQL): return [{"id": 1, "name": "test"}]
Remplacez ensuite la classe d'origine dans le test:
@patch ('my_module.database', new = mockdb) def test_db_query (): db = base de données () résultat = db.query ("SELECT * FROM TABLE") affirmer Len (résultat) == 1
Cette méthode vous convient pour que la classe entière suive le processus simulé, plut?t que de simplement modifier une ou deux méthodes.
3. Utilisez MagicMock
pour générer rapidement de fausses données
Si vous avez juste besoin de générer rapidement des valeurs de retour et que vous ne souhaitez pas définir la classe Mock complète vous-même, vous pouvez utiliser MagicMock
:
de Unittest.Mock Import MagicMock mock_obj = magicMock () mock_obj.method.return_value = 42 affirmer mock_obj.method () == 42
Vous pouvez l'utiliser en combinaison avec patch
, comme le remplacement du constructeur d'une certaine classe:
@patch ('my_module.myclass', autoSpec = true) def test_init (MockClass): instance = mockclass.return_value instance.calculate.return_value = 100 obj = myClass () résultat = obj.calculate () Affirmer le résultat == 100
Fondamentalement, c'est tout. Le c?ur de la simulation est "stand-in" et "Résultats prédéfinis", afin que vos tests puissent fonctionner sans compter sur l'environnement externe.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Installez PYODBC: utilisez la commande PiPInstallpyodbc pour installer la bibliothèque; 2. Connectez SQLServer: utilisez la cha?ne de connexion contenant le pilote, le serveur, la base de données, l'UID / PWD ou TrustEd_Connection via la méthode pyoDBC.Connect () et prendre en charge l'authentification SQL ou l'authentification Windows respectivement; 3. Vérifiez le pilote installé: exécutez pyodbc.Drivers () et filtrez le nom du pilote contenant ?SQLServer? pour vous assurer que le nom du pilote correct est utilisé tel que ?ODBCDriver17 pour SQLServer?; 4. Paramètres clés de la cha?ne de connexion

UseMockeryForcustomDependcesntencesBySettingExpectations withShouldReceive (). 2.UseLaravel’sfake () MethodForfacadesLikEmail, file d'attente, andhttptopReventReinteractions.3.replaceContainer-BoundServices with $ this-> mock () ForcLenersyntax.4.Usehtp

pandas.melt () est utilisé pour convertir les données de format larges en format long. La réponse consiste à définir de nouveaux noms de colonne en spécifiant id_vars conserver la colonne d'identification, Value_Vars Sélectionnez la colonne à fondre, var_name et valeur_name, 1.id_vars = 'name' signifie que la colonne de nom reste inchangée, 2.Value_vars = [Math ',' English ',' Science '. du nom de colonne d'origine, 4.value_name = 'score' définit le nouveau nom de colonne de la valeur d'origine et génère enfin trois colonnes, notamment le nom, le sujet et le score.

Définissez d'abord un formulaire ContactForm contenant le nom, la bo?te aux lettres et les champs de message; 2. De l'avis, la soumission du formulaire est traitée en jugeant la demande de poste, et après la vérification, nettoyée_data est obtenue et la réponse est retournée, sinon le formulaire vide sera rendu; 3. Dans le modèle, utilisez {{form.as_p}} pour rendre le champ et ajouter {% csrf_token%} pour empêcher les attaques CSRF; 4. Configurer le routage d'URL vers Point / Contact / vers la vue Contact_View; Utilisez Modelform pour associer directement le modèle pour obtenir un stockage de données. Djangoforms implémente le traitement intégré de la vérification des données, le rendu HTML et les invites d'erreur, qui convient au développement rapide des fonctions de forme s?re.

PythonCanBeoptimizedFormemory-Boundoperations AdreductoverHeadHroughGenerators, EfficientDatastructures et ManagingObjectliFetimes.first, useGeneratorsInSteadofListStoproceSlargedataseSeItematatime, EvitingLoadingEnteryToMeToMeMory.

L'introduction à l'arbitrage statistique L'arbitrage statistique est une méthode commerciale qui capture l'inadéquation des prix sur le marché financier basé sur des modèles mathématiques. Sa philosophie principale découle de la régression moyenne, c'est-à-dire que les prix des actifs peuvent s'écarter des tendances à long terme à court terme, mais reviendront éventuellement à leur moyenne historique. Les traders utilisent des méthodes statistiques pour analyser la corrélation entre les actifs et rechercher des portefeuilles qui changent généralement de manière synchrone. Lorsque la relation de prix de ces actifs est anormalement déviée, des opportunités d'arbitrage se présentent. Sur le marché des crypto-monnaies, l'arbitrage statistique est particulièrement répandu, principalement en raison de l'inefficacité et des fluctuations drastiques du marché lui-même. Contrairement aux marchés financiers traditionnels, les crypto-monnaies fonctionnent 24h / 24 et leurs prix sont très susceptibles de briser les nouvelles, les sentiments des médias sociaux et les améliorations technologiques. Cette fluctuation des prix constante crée fréquemment un biais de prix et fournit aux arbitrageurs un

Iter () est utilisé pour obtenir l'objet Iterator, et Next () est utilisé pour obtenir l'élément suivant; 1. Utilisez Iterator () pour convertir des objets itérables tels que les listes en itérateurs; 2. Appelez Next () pour obtenir des éléments un par un et déclenchez l'exception de l'arrêt lorsque les éléments sont épuisés; 3. Utilisez Suivant (iterator, par défaut) pour éviter les exceptions; 4. Les itérateurs personnalisés doivent implémenter les méthodes __iter __ () et __Next __ () pour contr?ler la logique d'itération; L'utilisation de valeurs par défaut est un moyen courant de parcourir la traversée et l'ensemble du mécanisme est concis et pratique.

Utilisez psycopg2.pool.simpleconnectionpool pour gérer efficacement les connexions de la base de données et éviter les frais généraux de performances causés par la création et la destruction de connexions fréquentes. 1. Lors de la création d'un pool de connexions, spécifiez le nombre minimum et maximum de connexions et de paramètres de connexion de base de données pour vous assurer que le pool de connexions est initialisé avec succès; 2. Obtenez la connexion via getConn () et utilisez putConn () pour renvoyer la connexion au pool après avoir exécuté l'opération de base de données. L'appel constamment conn.close () est interdit; 3. SimpleconnectionPool est en file et convient aux environnements multi-threads; 4. Il est recommandé d'implémenter un gestionnaire de contexte en combinaison avec le gestionnaire de contexte pour s'assurer que la connexion peut être renvoyée correctement lorsque des exceptions sont notées;
