Apa fungsi mock di python?

Ringkasan. dalam tutorial ini, Anda akan belajar tentang kelas Mock Python unittest dan cara menggunakannya untuk mengejek kelas lain

Pengantar kelas Mock Python unittest

Mocks mensimulasikan perilaku objek nyata. Untuk menguji objek yang bergantung pada objek lain secara terisolasi, Anda menggunakan objek tiruan untuk meniru objek nyata

Untuk mengejek objek, Anda menggunakan modul

{'id': 1, 'message': 'hello'}

Code language: Python (python)
7. Modul

{'id': 1, 'message': 'hello'}

Code language: Python (python)
7 menyediakan kelas

{'id': 1, 'message': 'hello'}

Code language: Python (python)
9 yang memungkinkan Anda untuk mengejek objek lain

Ini juga menyediakan kelas

from unittest.mock import Mock

Code language: Python (python)
_0 yang merupakan subkelas dari kelas

{'id': 1, 'message': 'hello'}

Code language: Python (python)
9. Selain metode dan properti kelas

{'id': 1, 'message': 'hello'}

Code language: Python (python)
9, kelas

from unittest.mock import Mock

Code language: Python (python)
0 memiliki implementasi dari semua metode dunder e. g. , __str__ dan __repr__

Lihat contoh berikut

from unittest.mock import Mock # create a new mock object mock = Mock() # mock the api function mock.api.return_value = { 'id': 1, 'message': 'hello' } # call the api function print(mock.api())

Code language: Python (python)

Keluaran

{'id': 1, 'message': 'hello'}

Code language: Python (python)

Bagaimana itu bekerja

Pertama, impor kelas

{'id': 1, 'message': 'hello'}

Code language: Python (python)
_9 dari modul

{'id': 1, 'message': 'hello'}

Code language: Python (python)
7

from unittest.mock import Mock

Code language: Python (python)

Kedua, buat instance baru dari kelas ________0______9

mock = Mock()

Code language: Python (python)

Ketiga, tiru fungsi

from unittest.mock import Mock

Code language: Python (python)
_7 dan tetapkan nilai pengembaliannya ke kamus

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python (python)

Terakhir, panggil

from unittest.mock import Mock

Code language: Python (python)
_7 dari objek tiruan. Itu akan mengembalikan nilai yang ditetapkan

print(mock.api())

Code language: Python (python)

Dalam contoh ini, kami memiliki dua objek tiruan.

from unittest.mock import Mock

Code language: Python (python)
9 &

mock = Mock()

Code language: Python (python)
0

Mari tambahkan pernyataan

mock = Mock()

Code language: Python (python)
_1 ke program untuk melihat cara kerjanya

from unittest.mock import Mock # create a new mock object mock = Mock() print(mock) # mock the api function mock.api.return_value = { 'id': 1, 'message': 'hello' } print(mock.api) # call the api print(mock.api())

Code language: Python (python)

Keluaran

<Mock id='1830094470496'> <Mock name='mock.api' id='1830100086416'> {'id': 1, 'message': 'hello'}

Code language: Python (python)

Keluarannya menunjukkan dua objek

{'id': 1, 'message': 'hello'}

Code language: Python (python)
_9

Singkatnya, jika Anda menetapkan properti yang tidak ada pada objek

{'id': 1, 'message': 'hello'}

Code language: Python (python)
9, Python akan mengembalikan objek tiruan baru. Karena dinamika ini, Anda dapat menggunakan kelas ________0______9 untuk mengejek objek apa pun yang Anda inginkan

Kapan menggunakan tiruan

Ini adalah kasus yang dapat Anda pertimbangkan untuk menggunakan tiruan

  • Panggilan sistem
  • Jaringan
  • operasi I/O
  • Jam dan waktu, zona waktu
  • Atau kasus lain yang hasilnya tidak bisa diprediksi

Mengapa menggunakan tiruan

Berikut ini adalah manfaat dari mock

  • Mempercepat tes
  • Kecualikan redudansi eksternal
  • Membuat hasil yang tidak terduga dapat diprediksi

Contoh Mock Python Unittest

Misalkan Anda memiliki modul bernama

mock = Mock()

Code language: Python (python)
5

from random import randint def speed(): return randint(40, 120) def alert(): s = speed() if s < 60 or s > 100: return True return False

Code language: Python (python)

Di sensor. modul py

  • mock = Mock()

    Code language: Python (python)
    _6 mengembalikan kecepatan kendaraan saat ini. Ini mengembalikan nilai acak antara 40 dan 120. Di dunia nyata, fungsi tersebut akan membaca data dari odometer
  • Fungsi

    mock = Mock()

    Code language: Python (python)
    _7 mengembalikan true jika kecepatan saat ini lebih rendah dari 60 km/ dan lebih tinggi dari 120 km/j. Fungsi

    mock = Mock()

    Code language: Python (python)
    _7 menggunakan fungsi

    mock = Mock()

    Code language: Python (python)
    6 untuk mendapatkan kecepatan saat ini

Akan sulit untuk menguji fungsi

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python (python)
0 karena nilai yang dikembalikan oleh fungsi

mock = Mock()

Code language: Python (python)
6 bervariasi. Untuk mengatasinya, Anda dapat menggunakan kelas ________0______9

Berikut ini membuat modul pengujian

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python (python)
_3 yang menguji fungsi

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python (python)
0

test_alert_normal (test_odometer.TestOdometer) .. ok ---------------------------------------------------------------------- Ran 1 test in 0.000s OK

Code language: Python (python)

Bagaimana itu bekerja

Pertama, tetapkan objek Mock ke fungsi

mock.api.return_value = { 'id': 1, 'message': 'hello' }

Code language: Python (python)
5

{'id': 1, 'message': 'hello'}

Code language: Python (python)
0

Kedua, atur nilai pengembalian fungsi ________13______6 menjadi 70

{'id': 1, 'message': 'hello'}

Code language: Python (python)
_1

Ketiga, panggil fungsi

mock = Mock()

Code language: Python (python)
_7 dan uji apakah mengembalikan False. Fungsi

mock = Mock()

Code language: Python (python)
_7 akan memanggil objek tiruan alih-alih fungsi

mock = Mock()

Code language: Python (python)
6 yang sebenarnya

Apa artinya mengejek suatu fungsi?

Fungsi tiruan memungkinkan Anda untuk menguji tautan antara kode dengan menghapus implementasi sebenarnya dari suatu fungsi, menangkap panggilan ke fungsi (dan parameter yang diteruskan dalam panggilan tersebut), menangkap instance fungsi konstruktor saat dibuat dengan new , dan mengizinkan konfigurasi waktu pengujian

Apa tujuan dari objek tiruan?

Menggunakan objek tiruan memungkinkan pengembang untuk memfokuskan pengujian mereka pada perilaku sistem yang sedang diuji tanpa mengkhawatirkan ketergantungannya . Misalnya, menguji algoritme kompleks berdasarkan beberapa objek yang berada dalam keadaan tertentu dapat diekspresikan dengan jelas menggunakan objek tiruan sebagai pengganti objek nyata.

Apa itu tiruan dan bagaimana Anda menggunakannya?

Apa itu mengejek? . Tujuan mengejek adalah untuk mengisolasi dan fokus pada kode yang sedang diuji dan bukan pada perilaku atau keadaan ketergantungan eksternal. a process used in unit testing when the unit being tested has external dependencies. The purpose of mocking is to isolate and focus on the code being tested and not on the behavior or state of external dependencies.