Ringkasan. dalam tutorial ini, Anda akan mempelajari cara menggunakan Python 6 untuk mengganti target dengan objek tiruan untuk sementara Pengantar tambalan PythonModul 7 memiliki 6 yang memungkinkan Anda untuk sementara mengganti target dengan objek tiruan Target dapat berupa fungsi, metode, atau kelas. Ini adalah string dengan format berikut
Untuk menggunakan _6 dengan benar, Anda perlu memahami dua langkah penting
Mengidentifikasi targetUntuk mengidentifikasi target
Panggilan tambalanPython memberi Anda tiga cara untuk memanggil 6
Saat Anda menggunakan _6 sebagai dekorator fungsi atau kelas, di dalam fungsi atau kelas target diganti dengan objek baru Jika Anda menggunakan tambalan di pengelola konteks, di dalam pernyataan 3, target diganti dengan objek baru Dalam kedua kasus tersebut, ketika fungsi atau pernyataan 3 keluar, tambalan dibatalkan Contoh tambalan pythonMari buat modul baru bernama 5 untuk tujuan demonstrasi
Bagaimana itu bekerja Fungsi 6 membaca file teks, mengubah setiap baris menjadi angka, dan mengembalikan daftar angka. Misalnya, file teks memiliki baris berikut
fungsi _6 akan mengembalikan daftar berikut _ Fungsi 8 menggunakan fungsi 6 untuk mendapatkan daftar angka dari file dan mengembalikan jumlah angka Untuk menguji _8, Anda dapat membuat modul 1 dan meniru fungsi 6 sebagai berikut
Jalankan pengujian
Keluaran
Alih-alih menggunakan objek _3 secara langsung, Anda dapat menggunakan objek 6 1) Menggunakan patch() sebagai dekoratorModul pengujian berikut 5 menguji modul 5 menggunakan 6 sebagai dekorator fungsi
Bagaimana itu bekerja Pertama, impor tambalan dari modul 7
Kedua, hiasi metode pengujian _9 dengan dekorator 0. Targetnya adalah fungsi baca dari total modul
Karena dekorator 0, metode 9 memiliki argumen tambahan mock_read yang merupakan turunan dari MagicMock Perhatikan bahwa Anda dapat memberi nama parameter apa pun yang Anda inginkan Di dalam metode _9, 6 akan menggantikan total. 6 dengan objek mock_read Ketiga, tetapkan daftar ke return_value dari objek tiruan _0 Terakhir, panggil fungsi _8 dan gunakan metode 7 untuk menguji apakah totalnya 6 Karena objek mock_read akan dipanggil, bukan total. _6 fungsi, Anda dapat meneruskan nama file apa pun ke fungsi 8 _1 Jalankan pengujian _2 Keluaran _3 2) Menggunakan patch() sebagai manajer konteksContoh berikut mengilustrasikan cara menggunakan 6 sebagai pengelola konteks _4 Bagaimana itu bekerja Pertama, tambal fungsi _1 menggunakan sebagai objek 2 dalam pengelola konteks _5 Artinya di dalam blok 3, 6 menggantikan fungsi 1 dengan objek mock_read Kedua, tetapkan daftar nomor ke properti ________23______6 dari objek 2 _6 Ketiga, panggil fungsi 8 dan uji apakah hasil dari fungsi 8 sama dengan 6 menggunakan metode 7 _1 Jalankan pengujian _8 Keluaran _9 3) Menggunakan patch() secara manualModul pengujian berikut ( _1) menunjukkan cara menggunakan 6 secara manual 0 Bagaimana itu bekerja Pertama, mulai tambalan dengan memanggil _6 dengan target adalah fungsi 6 dari modul 5 Bagaimana cara menggunakan patch tiruan Python?Bagaimana kita mengejek dengan Python? . Saat patch mencegat panggilan, ia mengembalikan objek MagicMock secara default. Dengan menyetel properti pada objek MagicMock, Anda dapat meniru panggilan API untuk mengembalikan nilai apa pun yang Anda inginkan atau memunculkan Pengecualian. using patch to hijack an API function or object creation call. When patch intercepts a call, it returns a MagicMock object by default. By setting properties on the MagicMock object, you can mock the API call to return any value you want or raise an Exception .
Bagaimana Anda menambal dekorator dengan Python?Berikut cara menambal dekorator yang hanya bertahan melalui satu pengujian. . Hilangkan pernyataan impor yang memuat target pengujian Tambal dekorator saat memulai pengujian seperti yang diterapkan di atas Panggil importlib. import_module() segera setelah menambal untuk memuat target pengujian Jalankan tes secara normal Apa gunanya dekorator tambalan di Python?Dekorator patch() memudahkan penggantian sementara kelas dalam modul tertentu dengan objek Mock . Secara default patch() akan membuat MagicMock untuk Anda. Anda dapat menentukan kelas Mock alternatif menggunakan argumen new_callable ke patch(). Buat objek Mock baru.
Apa perbedaan antara mock dan patch Python?Tindakan mengganti dependensi disebut patching, penggantiannya disebut mock . Bergantung pada apa sebenarnya tiruan itu, Anda mungkin juga mendengar ini disebut sebagai Uji Ganda, Uji Rintisan, Mata-Mata Uji, atau Objek Palsu. Dalam praktiknya di Python, perbedaannya tidak menjadi masalah. |