Pada artikel sebelumnya tentang mocking, kita telah melihat mengapa mocking bermanfaat dan cara menginstal pytest-mock. Kami juga telah melihat bagaimana kami dapat meniru fungsi yang lambat untuk membuat rangkaian pengujian kami lebih cepat Show Pada artikel ini, kita akan mempelajari beberapa cara lagi untuk mengejek fungsi. Singkatnya, kami memiliki modul bernama # application1.py Fungsi # test_application1.py 0, yang lambat (disimulasikan dengan tidur). Untuk dapat menguji get_operating_system, kami memutuskan untuk meniru fungsi # test_application1.py 0Fungsi tes adalah sebagai berikut # test_application1.py _Dengan tambalan, fungsi # test_application1.py _0 tidak akan memakan waktu 5 detik lagi dan akan segera mengembalikan nilaiIni dapat divisualisasikan seperti yang ditunjukkan di bawah ini. Alur default di mana # test_application1.py 0 akan menjadi sebagai berikutSaat kami melakukan tambalan, kami membuat fungsi tiruan baru yang dipanggil, melewati fungsi aslinya Begitulah cara kerja tiruan. Mereka mengganti benda aslinya dengan boneka Sekarang, Mari kita ubah sedikit. Katakanlah, fungsi # test_application1.py _0, alih-alih menjadi bagian dari # test_application1.py 6, diimpor dari modul lain bernama # test_application1.py 7# windows_utils.py _Kami mengimpor fungsi ini ke dalam modul aplikasi kami # application2.py Dan itu adalah cerita yang sama lagi di sini. Kita perlu mengejek fungsi lambat. Sekarang, fungsi # test_application1.py _0 berasal dari modul # test_application1.py 7. Jadi, Anda mungkin tergoda untuk melakukan hal berikutmocker.patch('windows_utils.is_windows', return_value=True) Tapi itu tidak akan bekerja seperti yang Anda harapkan. Dalam hal mengejek, kami selalu mengejek di mana fungsi itu digunakan. Meskipun # test_application1.py _0 berasal dari modul # test_application1.py 7, karena digunakan di # windows_utils.py 2, kita harus mengejek # windows_utils.py 3 sebagai gantinya. Ini karena cara kerja impor di python. Di Python, setiap kali Anda mengimpor sesuatu ke dalam modul, itu menjadi bagian dari modul. Jadi, Anda selalu menyebutnya sebagai # windows_utils.py _4Jadi, fungsi tes akan tetap sama seperti sebelumnya # test_application2.py Seperti dibahas di atas, target tiruan Anda harus mencerminkan bagaimana sesuatu diimpor. Di # windows_utils.py _2 kami telah mengimpor # test_application1.py 0 dengan # windows_utils.py 7. Karenanya, target tiruan kami adalah # windows_utils.py 3Sebaliknya, jika kita hanya melakukan # windows_utils.py _9, target ejekan kita juga perlu diubah. Mari kita lihat bagaimana ini bekerja dengan sebuah contoh# application3.py Sekarang target tiruan untuk 'is_windows' tidak lagi # application2.py 0 karena tidak ada referensi langsung ke 'is_windows' di 'application3'. Sebagai gantinya kami menggunakan # application2.py 1. Itu adalah referensi yang sepenuhnya memenuhi syarat. Tes baru adalah sebagai berikut# test_application3.py Alih-alih menggunakan # application2.py _1, kita dapat menyederhanakannya menjadi # application2.py 3 juga. Tetapi mengacu pada segala sesuatu sebagai # application2.py _4 tetap bersih dan mudah dimengertiItu saja untuk artikel ini. Kita akan melihat bagaimana kita bisa mengejek objek di artikel berikutnya. Tetap disini Daftar lengkap artikel dalam seri ini Fungsi Mengejek Bagian I Jika Anda menyukai artikel ini, Anda dapat bertepuk tangan untuk mendorong saya agar segera mengeluarkan artikel berikutnya. Jika menurut Anda seseorang yang Anda kenal dapat memperoleh manfaat dari artikel ini, bagikan dengan mereka Jika Anda ingin berterima kasih kepada saya, Anda dapat menyapa saya di twitter @durgaswaroop. Dan, jika Anda ingin mendukung saya, inilah tautan paypal saya. paypal. saya/durgaswaroop Bagaimana Anda mengejek suatu fungsi dalam modul Python?Bagaimana kita mengejek dengan Python? . Tulis pengujian seolah-olah Anda menggunakan API eksternal nyata Dalam fungsi yang diuji, tentukan panggilan API mana yang perlu diejek; Dalam fungsi pengujian, tambal panggilan API Siapkan respons objek MagicMock Jalankan pengujian Anda Apa fungsi tiruan di Python?mock adalah pustaka untuk pengujian dengan Python . Ini memungkinkan Anda untuk mengganti bagian dari sistem Anda yang sedang diuji dengan objek tiruan dan membuat pernyataan tentang bagaimana mereka telah digunakan. paling unit. mock menyediakan kelas Mock inti yang menghilangkan kebutuhan untuk membuat sejumlah rintisan bertopik di seluruh rangkaian pengujian Anda.
Bisakah Anda mengejek impor dengan Python?Python Import Mocker menyediakan cara mudah untuk mengimpor modul dan meniru dependensinya dengan cara yang terisolasi .
Apa yang dilakukan @patch dengan Python?patch() sebagai Dekorator
. Fungsi-fungsi ini sekarang ada di file mereka sendiri, terpisah dari pengujiannya. Selanjutnya, Anda akan membuat ulang tes Anda dalam file bernama tes. py. mock an object for the duration of your entire test function, you can use patch() as a function decorator. These functions are now in their own file, separate from their tests. Next, you'll re-create your tests in a file called tests.py . |