mock_openfait partie du mockframework et est très simple à utiliser. patchutilisé comme contexte renvoie l'objet utilisé pour remplacer celui qui a été corrigé: vous pouvez l'utiliser pour simplifier votre test.
Python 3.x
Utilisez à la builtinsplace de __builtin__.
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")
Python 2.7
mockne fait pas partie de unittestet vous devriez patcher__builtin__
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")
Coffret décorateur
Si vous patchutilisiez comme décorateur en utilisant mock_open()le résultat de s comme new patchargument de s, cela peut être un peu bizarre.
Dans ce cas, il est préférable d 'utiliser l new_callable patch' argument s et de se rappeler que tous les arguments supplémentaires qui patchne sont pas utilisés seront passés à la new_callablefonction comme décrit dans la patchdocumentation .
patch () prend des arguments de mot-clé arbitraires. Ceux-ci seront transmis au Mock (ou new_callable) lors de la construction.
Par exemple, la version décorée pour Python 3.x est:
@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")
N'oubliez pas que dans ce cas patch, vous ajouterez l'objet fictif comme argument de votre fonction de test.