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
Patricia Arquetteoriginal
2024-10-20 16:24:02840parcourir

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>

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>

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>

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!

Déclaration:
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