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!