Kerangka UnitTest - Uji Pengecualian

Framework pengujian Python menyediakan metode pernyataan berikut untuk memeriksa apakah pengecualian dimunculkan.

assertRaises (pengecualian, dapat dipanggil, * args, ** kwds)

Uji apakah pengecualian (argumen pertama) dimunculkan ketika sebuah fungsi dipanggil dengan argumen posisi atau kata kunci apa pun. Tes lulus jika pengecualian yang diharapkan dimunculkan, merupakan kesalahan jika pengecualian lain dimunculkan, atau gagal jika tidak ada pengecualian yang dimunculkan. Untuk menangkap salah satu grup pengecualian, tupel yang berisi kelas pengecualian dapat dilewatkan sebagai pengecualian.

Dalam contoh di bawah ini, fungsi pengujian ditentukan untuk memeriksa apakah ZeroDivisionError dimunculkan.

import unittest

def div(a,b):
   return a/b
class raiseTest(unittest.TestCase):
   def testraise(self):
      self.assertRaises(ZeroDivisionError, div, 1,0)

if __name__ == '__main__':
   unittest.main()

Fungsi testraise () menggunakan fungsi assertRaises () untuk melihat apakah pembagian dengan nol terjadi saat fungsi div () dipanggil. Kode di atas akan memunculkan pengecualian. Tetapi mengubah argumen menjadi fungsi div () sebagai berikut -

self.assertRaises(ZeroDivisionError, div, 1,1)

Ketika kode dijalankan dengan perubahan ini, pengujian gagal karena ZeroDivisionError tidak terjadi.

F
================================================================
FAIL: testraise (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "raisetest.py", line 7, in testraise
      self.assertRaises(ZeroDivisionError, div, 1,1)
AssertionError: ZeroDivisionError not raised

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures = 1)

assertRaisesRegexp (pengecualian, regexp, callable, * args, ** kwds)

Menguji apakah regexp cocok dengan representasi string dari pengecualian yang dimunculkan. regexp dapat berupa objek ekspresi reguler atau string yang berisi ekspresi reguler yang cocok untuk digunakan oleh re.search ().

Contoh berikut menunjukkan bagaimana assertRaisesRegexp () digunakan -

import unittest
import re

class raiseTest(unittest.TestCase):
   def testraiseRegex(self):
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
      
if __name__ == '__main__':
   unittest.main()

Di sini, testraseRegex () test tidak gagal sebagai argumen pertama. "Point" ditemukan di string argumen kedua.

================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:/Python27/raiseTest.py", line 11, in testraiseRegex
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
AssertionError: TypeError not raised
----------------------------------------------------------------------

Namun, perubahannya seperti yang ditunjukkan di bawah ini -

self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")

Pengecualian TypeError akan dilempar. Karenanya, hasil berikut akan ditampilkan -

================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "raisetest.py", line 11, in testraiseRegex
      self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")
AssertionError: "invalid" does not match 
   "first argument must be string or compiled pattern"
----------------------------------------------------------------------