Maison >développement back-end >Tutoriel Python >Comment simuler des fichiers ouverts dans des instructions Python à l'aide du framework de tests unitaires ?

Comment simuler des fichiers ouverts dans des instructions Python à l'aide du framework de tests unitaires ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-20 16:23:29640parcourir

How to Mock Open Files in Python's With Statements Using the Unit Test Framework?

Se moquer des fichiers ouverts dans les instructions With dans le cadre de tests unitaires de Python

Lors du test du code qui utilise des fichiers ouverts dans les instructions with, il est nécessaire de moquez-vous de ces fichiers ouverts pour des tests unitaires précis. Cet article examine les approches permettant de se moquer de ces fichiers à l'aide du framework Mock de Python.

Python version 3

Le framework Mock fournit la fonction mock_open, qui peut être utilisée conjointement avec le gestionnaire de contexte de correctifs pour simuler les fichiers ouverts. La fonction patch, utilisée comme gestionnaire de contexte, renvoie l'objet qui remplace l'objet patché :

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

Alternativement, la fonction patch peut être utilisée comme décorateur avec l'argument new_callable. N'oubliez pas 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>

Dans ce cas, l'objet simulé sera passé en argument à la fonction test.

Python Version 2

Pour Python 2, le module __builtin__.open doit être corrigé au lieu de buildins.open, et le framework fictif doit être installé séparément via pip :

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

Ces techniques permettent de se moquer efficacement des fichiers ouverts dans les instructions with, facilitant ainsi les tests unitaires complets pour les applications Python.

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