Mengejek Pemegang Terbuka dalam Pernyataan Dengan Menggunakan Mock dalam Python
Apabila menulis ujian unit untuk kod yang menggunakan pernyataan dengan dan operasi fail, mengejek pemegang terbuka menjadi perlu untuk mengasingkan tingkah laku kod yang diuji. Begini cara untuk mencapainya menggunakan rangka kerja Mock dalam Python:
Python 3
Menggunakan modul unittest.mock, anda boleh menampal fungsi terbina dalam seperti open. Begini caranya:
<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>
Python 2
Untuk Python 2, sintaks berbeza sedikit. Daripada menampal builtins.open, anda perlu menampal __builtin__.open dan import mock secara berasingan:
<code class="python">import mock with mock.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>
Menampal dengan Penghias
Anda juga boleh menggunakan patch penghias untuk sintaks yang lebih bersih. Walau bagaimanapun, menggunakan hasil mock_open secara langsung dalam argumen new= untuk patch boleh menjadi rumit. Sebaliknya, manfaatkan argumen new_callable= seperti yang diterangkan dalam dokumentasi:
<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>
Nota: Perlu diingat bahawa dalam kes ini, objek yang ditampal akan dihantar sebagai hujah kepada ujian anda fungsi.
Atas ialah kandungan terperinci Bagaimana untuk Mengejek Pemegang \'open\' dalam Pernyataan \'with\' Menggunakan Mock in Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!