Bagaimana untuk Mengejek Pemegang \'open\' dalam Pernyataan \'with\' Menggunakan Mock in Python?

Patricia Arquette
Lepaskan: 2024-10-20 16:24:02
asal
797 orang telah melayarinya

How to Mock the

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan