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!