mock_openes parte del mockframework y es muy simple de usar. patchusado como contexto devuelve el objeto usado para reemplazar el parcheado: puede usarlo para simplificar su prueba.
Python 3.x
Usar en builtinslugar 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
mockno es parte unittesty debes parchear__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")
Estuche decorador
Si patchusarías como decorador usando mock_open()el resultado como new patchargumento, puede ser un poco extraño.
En este caso, es mejor usar el new_callable patchargumento de 's y recordar que cada argumento adicional que patchno use se pasará a new_callablefuncionar como se describe en la patchdocumentación .
patch () toma argumentos de palabras clave arbitrarios. Estos se pasarán al simulacro (o new_callable) en la construcción.
Por ejemplo, la versión decorada para Python 3.x es:
@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")
Recuerde que en este caso patchagregará el objeto simulado como argumento de su función de prueba.