Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengejek Fail Terbuka dalam Python Unittest.Mock?
Mengejek Fail Terbuka dalam Python Unittest.Mock
Apabila menguji kod Python yang menggunakan operasi fail, mengejek gelagat fail terbuka secara berkesan adalah penting . Satu senario khusus timbul apabila buka digunakan dalam pernyataan dengan, seperti yang dilihat dalam kod berikut:
<code class="python">def testme(filepath): with open(filepath) as f: return f.read()</code>
Python 3
Untuk mengejek operasi terbuka ini, gunakan unittest.mock bersempena dengan mock_open, yang merupakan sebahagian daripada rangka kerja olok-olok. patch berfungsi sebagai pengurus konteks, mengembalikan objek yang digunakan untuk menggantikan yang ditampal:
<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>
Sebagai alternatif, patch boleh digunakan sebagai penghias. Walau bagaimanapun, menggunakan hasil mock_open() kerana hujah baharu mungkin menyusahkan. Sebaliknya, gunakan argumen new_callable patch dan ingat bahawa argumen tambahan yang tidak digunakan oleh patch akan dihantar ke fungsi new_callable:
<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>
Perhatikan bahawa patch akan menyediakan objek yang diejek sebagai argumen kepada fungsi ujian dalam kejadian ini .
Python 2
Untuk Python 2, perlu menampal __builtin__.open dan mengimport mock secara berasingan:
<code class="python">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")</code>
Atas ialah kandungan terperinci Bagaimana untuk Mengejek Fail Terbuka dalam Python Unittest.Mock?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!