Maison > développement back-end > Tutoriel Python > Comment se moquer du handle « open » dans l'instruction « with » à l'aide de Mock en Python ?

Comment se moquer du handle « open » dans l'instruction « with » à l'aide de Mock en Python ?

Patricia Arquette
Libérer: 2024-10-20 16:24:02
original
833 Les gens l'ont consulté

How to Mock the

Mocking Open Handle dans une instruction With à l'aide de Mock en Python

Lors de l'écriture de tests unitaires pour du code qui utilise l'instruction with et les opérations sur les fichiers, se moquer du handle ouvert devient nécessaire pour isoler le comportement du code testé. Voici comment y parvenir en utilisant le framework Mock en Python :

Python 3

À l'aide du module unittest.mock, vous pouvez patcher des fonctions intégrées comme open. Voici comment :

<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

Python 2

Pour Python 2, la syntaxe diffère légèrement. Au lieu de patcher buildins.open, vous devez patcher __builtin__.open et importer mock séparément :

<code class="python">import mock

with mock.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

Patching avec un décorateur

Vous pouvez également utiliser le patch décorateur pour une syntaxe plus propre. Cependant, utiliser le résultat de mock_open directement dans l'argument new= pour patch peut s'avérer délicat. Au lieu de cela, exploitez l'argument new_callable= comme décrit dans la documentation :

<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

Remarque : Gardez à l'esprit que dans ce cas, l'objet corrigé sera passé comme argument à votre test fonction.

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