Materi
Perilaku fungsi tidak hanya nilai yang dikembalikannya. Menolak masukan yang tidak sah dengan melempar exception juga perilaku, dan diuji sama seperti hasil yang benar. assertRaises dipakai sebagai pengelola konteks: blok with self.assertRaises(ValueError): berisi pemanggilan yang harus melempar ValueError. Test lulus bila exception itu muncul, gagal (F) bila tidak muncul exception apa pun, dan berakhir galat (E) bila yang muncul exception jenis lain.
import unittest
def jumlah_kursi(baris, per_baris):
if baris <= 0 or per_baris <= 0:
raise ValueError("baris dan kursi per baris harus positif")
return baris * per_baris
class UjiKursi(unittest.TestCase):
def test_hitung(self):
self.assertEqual(jumlah_kursi(12, 20), 240)
def test_baris_nol_ditolak(self):
with self.assertRaises(ValueError):
jumlah_kursi(0, 20)
Untuk hasil pecahan, assertAlmostEqual(a, b) menghitung selisih keduanya, membulatkannya ke tujuh angka di belakang koma, lalu membandingkannya dengan nol. Argumen places mengubah jumlah angka itu. Dengan places=2, nilai 8.283333 dan 8.28 dianggap sama, karena selisihnya 0,0033 dan pembulatan ke dua desimal menjadikannya nol. Pecahan biner yang tidak persis tidak lagi menggagalkan test, sementara hasil yang memang meleset tetap tertangkap.
class UjiRataRata(unittest.TestCase):
def test_tiga_nilai(self):
self.assertAlmostEqual(sum([7.5, 8.25, 9.1]) / 3, 8.28, places=2)
Kapan dipakai: assertRaises untuk setiap aturan penolakan yang tertulis di spesifikasi — saldo kurang, jumlah nol, format salah. assertAlmostEqual untuk setiap hasil yang melewati pembagian atau perkalian pecahan. Keduanya punya pasangan yang lebih ketat: assertRaisesRegex sekaligus memeriksa isi pesan galatnya, dan assertNotAlmostEqual memeriksa bahwa dua angka memang berbeda.