mock_open
es parte del mock
framework y es muy simple de usar. patch
usado como contexto devuelve el objeto usado para reemplazar el parcheado: puede usarlo para simplificar su prueba.
Python 3.x
Usar en builtins
lugar 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
mock
no es parte unittest
y 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 patch
usarías como decorador usando mock_open()
el resultado como new
patch
argumento, puede ser un poco extraño.
En este caso, es mejor usar el new_callable
patch
argumento de 's y recordar que cada argumento adicional que patch
no use se pasará a new_callable
funcionar como se describe en la patch
documentació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 patch
agregará el objeto simulado como argumento de su función de prueba.