Python unittest mock raise pengecualian

Lebih sering daripada tidak, perangkat lunak yang kami tulis berinteraksi langsung dengan apa yang kami beri label sebagai layanan "kotor". Dalam istilah awam. layanan yang sangat penting untuk aplikasi kita, tetapi interaksinya memiliki efek samping yang disengaja tetapi tidak diinginkan—yaitu, tidak diinginkan dalam konteks uji coba otonom. Sebagai contoh. mungkin kami sedang menulis aplikasi sosial dan ingin menguji 'fitur Posting ke Facebook' baru kami, tetapi tidak ingin _sebenarnya_ memposting ke Facebook setiap kali kami menjalankan rangkaian pengujian. Pustaka Python `unittest` menyertakan subpaket bernama `unittest. mock`—atau jika Anda mendeklarasikannya sebagai dependensi, cukup `mock`—yang menyediakan cara yang sangat ampuh dan berguna untuk mengejek dan mematikan efek samping yang tidak diinginkan ini

Membagikan

Membagikan

Python unittest mock raise pengecualian

Lebih sering daripada tidak, perangkat lunak yang kami tulis berinteraksi langsung dengan apa yang kami beri label sebagai layanan "kotor". Dalam istilah awam. layanan yang sangat penting untuk aplikasi kita, tetapi interaksinya memiliki efek samping yang disengaja tetapi tidak diinginkan—yaitu, tidak diinginkan dalam konteks uji coba otonom. Sebagai contoh. mungkin kami sedang menulis aplikasi sosial dan ingin menguji 'fitur Posting ke Facebook' baru kami, tetapi tidak ingin _sebenarnya_ memposting ke Facebook setiap kali kami menjalankan rangkaian pengujian. Pustaka Python `unittest` menyertakan subpaket bernama `unittest. mock`—atau jika Anda mendeklarasikannya sebagai dependensi, cukup `mock`—yang menyediakan cara yang sangat ampuh dan berguna untuk mengejek dan mematikan efek samping yang tidak diinginkan ini

Python unittest mock raise pengecualian

Oleh Naftuli Kay

Pakar Terverifikasi  di bidang Teknik

Dari membangun server TCP khusus hingga aplikasi keuangan berskala besar, pengalaman Naftuli yang luas membuatnya menjadi dev dan sysadmin kelas atas

Salah satu aspek paling mendasar dalam rekayasa perangkat lunak adalah penanganan kesalahan. Aplikasi perangkat lunak dapat rusak karena berbagai alasan dan oleh karena itu sangat penting untuk dapat menulis kode sedemikian rupa sehingga dapat menangani dan melaporkan pengecualian secara efektif

Menangani pengecualian dalam kode sumber saja tidak cukup. Menguji bahwa kode Anda menangani dan melaporkan pengecualian seperti yang diharapkan bahkan lebih penting. Pengujian memastikan bahwa pengecualian dimunculkan pada saat yang tepat dan dengan pesan yang benar

Pada artikel hari ini kami akan mendemonstrasikan cara menulis kasus uji yang menguji apakah suatu fungsi memunculkan Pengecualian yang diharapkan saat peristiwa tertentu terjadi. Lebih khusus lagi, kami akan menunjukkan cara melakukannya menggunakan dua paket pengujian paling populer di Python, yaitu unittest dan pytest

Pertama, mari buat satu contoh fungsi yang memunculkan Pengecualian saat peristiwa tertentu terjadi. Kami kemudian akan melalui panduan langkah demi langkah yang pada akhirnya akan membantu Anda menguji penanganan pengecualian

def greet(greeting):
if greeting not in ('hello', 'hi'):
raise ValueError(f'{greeting} is not allowed')

print(greeting + ' world!')

Fungsi greet_ kita akan memunculkan ValueError jika argumen input

import unittestclass MyTestCase(unittest.TestCase):    def test_greet_raises(self):
self.assertRaises(ValueError, greet, 'bye')
if __name__ == '__main__':
unittest.main()
0 tidak sama dengan
import unittestclass MyTestCase(unittest.TestCase):    def test_greet_raises(self):
self.assertRaises(ValueError, greet, 'bye')
if __name__ == '__main__':
unittest.main()
1 atau
import unittestclass MyTestCase(unittest.TestCase):    def test_greet_raises(self):
self.assertRaises(ValueError, greet, 'bye')
if __name__ == '__main__':
unittest.main()
2. Sekarang mari kita lihat dalam praktiknya bagaimana kita dapat menguji dengan benar bahwa fungsi memunculkan pengecualian seperti yang diharapkan dengan unittest dan pytest

Menguji penanganan pengecualian dengan unittest

Untuk membuat kasus uji untuk menguji apakah ValueError dimunculkan oleh

import unittestclass MyTestCase(unittest.TestCase):    def test_greet_raises(self):
self.assertRaises(ValueError, greet, 'bye')
if __name__ == '__main__':
unittest.main()
6 ketika argumen input tidak memiliki nilai yang diharapkan, kita dapat memanfaatkan metode
import unittestclass MyTestCase(unittest.TestCase):    def test_greet_raises(self):
self.assertRaises(ValueError, greet, 'bye')
if __name__ == '__main__':
unittest.main()
7 seperti yang diuraikan di bawah ini

import unittestclass MyTestCase(unittest.TestCase):    def test_greet_raises(self):
self.assertRaises(ValueError, greet, 'bye')
if __name__ == '__main__':
unittest.main()
_

Alternatifnya, Anda bahkan dapat menggunakan Pengelola Konteks seperti yang ditunjukkan pada contoh di bawah ini

import unittestclass MyTestCase(unittest.TestCase):def test_greet_raises(self):
with self.assertRaises(ValueError) as context:
greet('bye')
if __name__ == '__main__':
unittest.main()

Kami bahkan dapat menguji pesan aktual yang dilaporkan oleh Pengecualian yang dimunculkan menggunakan pendekatan berikut

import unittestclass MyTestCase(unittest.TestCase):def test_greet_raises(self):
with self.assertRaises(ValueError) as context :
greet('bye')
self.assertEqual('bye is not allowed', str(context.exception))
if __name__ == '__main__':
unittest.main()
_

Menguji penanganan pengecualian dengan pytest

Dengan cara yang sama kita dapat menggunakan pytest untuk menegaskan bahwa suatu fungsi memunculkan pengecualian

import pytestdef test_greet():
with pytest.raises(ValueError):
greet('bye')
_

Demikian pula, kami juga dapat menguji pesan kesalahan yang dilaporkan oleh Pengecualian yang kami harapkan akan dimunculkan

import pytestdef test_greet():
with pytest.raises(ValueError, match='bye is not allowed'):
greet('bye')

Pikiran Akhir

Cakupan pengujian adalah salah satu metrik terpenting yang dapat Anda gunakan untuk mengetahui seberapa baik kode sumber Anda diuji. Terlepas dari desain yang bagus dan kode yang efisien, sangat penting untuk memastikan bahwa setiap aspek kode Anda berfungsi seperti yang diharapkan sehingga Anda dapat meminimalkan bug. Dan ini hanya dapat dicapai melalui pengujian menyeluruh

Dalam tutorial singkat hari ini, kami mendemonstrasikan cara menguji fungsi yang memunculkan Pengecualian. Selain menguji “jalur yang baik” dari alur, penting juga untuk memastikan bahwa kesalahan ditangani dengan benar dalam kode sumber Anda

Jadilah anggota dan baca setiap cerita di Medium. Biaya keanggotaan Anda secara langsung mendukung saya dan penulis lain yang Anda baca. Anda juga akan mendapatkan akses penuh ke setiap cerita di Medium

Bagaimana Anda memunculkan pengecualian di Python tiruan?

Meningkatkan pengecualian dengan tiruan . Jika Anda menyetel ini ke kelas atau instance pengecualian, maka pengecualian akan dimunculkan saat mock dipanggil. >>> mock = Mock(side_effect=Exception('Boom.

Apa yang dilakukan @patch dengan Python?

patch() unittest. mock menyediakan mekanisme yang kuat untuk mengejek objek, yang disebut patch() , yang mencari objek dalam modul tertentu dan mengganti objek itu dengan Mock . Biasanya, Anda menggunakan patch() sebagai dekorator atau pengelola konteks untuk menyediakan ruang lingkup di mana Anda akan mengejek objek target.

Bagaimana Anda menyatakan pengecualian dengan Python?

Pernyataan adalah konsep pemrograman yang digunakan saat menulis kode di mana pengguna menyatakan kondisi benar menggunakan pernyataan tegas sebelum menjalankan modul . Jika kondisinya True, kontrol hanya berpindah ke baris kode berikutnya.

Apa itu Assert_called_once_with?

assert_called_with() digunakan untuk memeriksa apakah metode dipanggil dengan kumpulan argumen tertentu. . assert_called_once_with() digunakan untuk memeriksa apakah metode dipanggil dengan kumpulan argumen tertentu .