Comment se moquer des objets utilisés dans les gestionnaires de contexte avec unittest.mock ?

DDD
Libérer: 2024-10-20 16:27:29
original
573 Les gens l'ont consulté

How to Mock Objects Used in Context Managers with unittest.mock?

Comment se moquer d'un objet utilisé dans un gestionnaire de contexte avec unittest.mock

Lors du test d'un code qui utilise une instruction with, cela peut être difficile de se moquer de l’objet sous-jacent. Considérons l'exemple suivant :

def testme(filepath):
    with open(filepath) as f:
        return f.read()
Copier après la connexion

Pour tester cette fonction avec unittest.mock, nous devons nous moquer de la fonction open. Voici comment :

Python 3 :

  1. Corrigez buildins.open et utilisez mock_open à partir de unittest.mock.
  2. Utilisez le patch comme contexte gérant ou décorateur. Dans les deux cas, transmettez mock_open avec les données de lecture souhaitées et vérifiez que le fichier simulé est appelé avec les arguments attendus.

Python 2 :

  1. Patch __builtin__.open au lieu de buildins.open.
  2. Utilisez mock comme gestionnaire de contexte et transmettez mock_open comme avant.

Exemple :

<code class="python">from unittest.mock import patch, mock_open

@patch("builtins.open", new_callable=mock_open, read_data="data")
def test_patch(mock_file):
    assert open("path/to/open").read() == "data"
    mock_file.assert_called_with("path/to/open")</code>
Copier après la connexion

N'oubliez pas que dans Python 3, le patch transmettra l'objet simulé comme argument à votre fonction de test, tandis que dans Python 2, vous devez affirmer explicitement le fichier simulé.

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!

source:php
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal