Materi
Test yang memeriksa sebuah objek — keranjang belanja, daftar antrean, buku kas — membutuhkan objek baru di setiap test. Metode setUp() dijalankan unittest sebelum setiap metode test, dan tearDown() sesudahnya. Objek yang dibuat di setUp lalu disimpan di self hanya dipakai test yang sedang berjalan; test berikutnya mendapat objek baru lagi. Dokumentasi unittest menyebut susunan ini fixture: keadaan awal yang disiapkan untuk test.
import unittest
class Antrean:
def __init__(self):
self.isi = []
def daftar(self, nama):
self.isi.append(nama)
return len(self.isi)
class UjiAntrean(unittest.TestCase):
def setUp(self):
self.antrean = Antrean()
def test_nomor_pertama(self):
self.assertEqual(self.antrean.daftar("Rina"), 1)
def test_nomor_kedua(self):
self.antrean.daftar("Rina")
self.assertEqual(self.antrean.daftar("Joko"), 2)
Setiap test berdiri sendiri. unittest menjalankan metode test berurutan sesuai abjad namanya, bukan urutan penulisannya. Test yang hanya lulus bila test lain berjalan lebih dulu akan rusak saat namanya diganti, saat test baru ditambahkan, atau saat dijalankan sendirian. setUp adalah tempat menyiapkan keadaan awal yang sama untuk semuanya.
Untuk banyak kasus berbentuk sama, self.subTest(...) dipakai di dalam perulangan. Tanpa subTest, assert pertama yang gagal menghentikan metode itu dan kasus sisanya tidak pernah diperiksa. Dengan subTest, setiap kasus yang gagal dilaporkan sendiri lengkap dengan parameternya, dan perulangan berjalan sampai habis.
def test_nomor_meja(self):
for teks, harap in [("M01", True), ("M1", False), ("X01", False)]:
with self.subTest(teks=teks):
self.assertEqual(nomor_meja_sah(teks), harap)