Python jika tidak benar, tingkatkan pengecualian

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 dengan if else di Python?

Sebagai pengembang Python, Anda dapat memilih untuk melontarkan pengecualian jika suatu kondisi terjadi. Untuk membuang (atau menaikkan) pengecualian, gunakan kata kunci kenaikan .

Pernyataan mana yang menimbulkan pengecualian jika ekspresinya salah?

Jika ekspresi ini salah, pengecualian AssertionError dimunculkan yang dapat ditangani seperti pengecualian lainnya.

Bagaimana Anda meningkatkan TypeError dengan Python?

TypeError adalah salah satu dari beberapa pengecualian standar Python. TypeError dimunculkan setiap kali operasi dilakukan pada tipe objek yang salah/tidak didukung. Misalnya, menggunakan operator + (tambahan) pada string dan nilai integer akan memunculkan TypeError .

Pengecualian mana yang muncul ketika variabel tidak didefinisikan?

NameError dimunculkan saat pengidentifikasi yang sedang diakses tidak ditentukan dalam lingkup lokal atau global.