Comment simuler des fichiers ouverts en Python Unittest.Mock ?

Linda Hamilton
Libérer: 2024-10-20 16:27:02
original
487 Les gens l'ont consulté

How to Mock Open Files in Python Unittest.Mock?

Se moquer des fichiers ouverts dans Python Unittest.Mock

Lors du test du code Python qui utilise des opérations sur les fichiers, il est essentiel de se moquer efficacement du comportement des fichiers ouverts . Un scénario spécifique se produit lorsque open est utilisé dans une instruction with, comme le montre le code suivant :

<code class="python">def testme(filepath):
    with open(filepath) as f:
        return f.read()</code>
Copier après la connexion

Python 3

Pour simuler cette opération open, utilisez unittest.mock en conjonction avec mock_open, qui fait partie du framework mock. patch sert de gestionnaire de contexte, renvoyant l'objet utilisé pour remplacer celui corrigé :

<code class="python">from unittest.mock import patch, mock_open
with patch("builtins.open", mock_open(read_data="data")) as mock_file:
    assert open("path/to/open").read() == "data"
mock_file.assert_called_with("path/to/open")</code>
Copier après la connexion

Alternativement, patch peut être utilisé comme décorateur. Cependant, utiliser le résultat de mock_open() comme nouvel argument peut être fastidieux. Utilisez plutôt l'argument new_callable de patch et rappelez-vous que les arguments supplémentaires non utilisés par patch seront transmis à la fonction new_callable :

<code class="python">@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

Notez que patch fournira l'objet simulé comme argument à la fonction de test dans ce cas. .

Python 2

Pour Python 2, il est nécessaire de patcher __builtin__.open à la place et d'importer le mock séparément :

<code class="python">from mock import patch, mock_open
with patch("__builtin__.open", mock_open(read_data="data")) as mock_file:
    assert open("path/to/open").read() == "data"
mock_file.assert_called_with("path/to/open")</code>
Copier après la connexion

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