mock_open
ist Teil des mock
Frameworks und sehr einfach zu bedienen. patch
Als Kontext verwendet gibt das Objekt zurück, das zum Ersetzen des gepatchten Objekts verwendet wird: Sie können es verwenden, um Ihren Test zu vereinfachen.
Python 3.x.
Verwenden Sie builtins
anstelle von __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
ist nicht Teil von unittest
und Sie sollten patchen__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")
Dekorateur Fall
Wenn Sie patch
als Dekorateur mock_open()
das Ergebnis von new
patch
'verwenden, kann das Argument des ' etwas seltsam sein.
In diesem Fall ist es besser, das new_callable
patch
Argument von ' zu verwenden und zu beachten, dass alle zusätzlichen Argumente, patch
die nicht verwendet werden, an new_callable
die in der patch
Dokumentation beschriebene Funktion übergeben werden .
patch () akzeptiert beliebige Schlüsselwortargumente. Diese werden beim Bau an den Mock (oder new_callable) übergeben.
Zum Beispiel ist die dekorierte Version für Python 3.x :
@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")
Denken Sie daran, dass in diesem Fall patch
das Scheinobjekt als Argument Ihrer Testfunktion hinzugefügt wird.