Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengejek Fail Terbuka dalam Python Unittest.Mock?

Bagaimana untuk Mengejek Fail Terbuka dalam Python Unittest.Mock?

Linda Hamilton
Linda Hamiltonasal
2024-10-20 16:27:02383semak imbas

How to Mock Open Files in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn