Perbedaannya memanifestasikan dirinya ketika Anda memiliki lebih dari satu metode pengujian di kelas Anda. setUpClass
dan tearDownClass
dijalankan sekali untuk seluruh kelas; setUp
dan tearDown
dijalankan sebelum dan sesudah setiap metode pengujian.
Sebagai contoh:
class Example(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass")
def setUp(self):
print("setUp")
def test1(self):
print("test1")
def test2(self):
print("test2")
def tearDown(self):
print("tearDown")
@classmethod
def tearDownClass(cls):
print("tearDownClass")
Saat Anda menjalankan tes ini, ini mencetak:
setUpClass
setUp
test1
tearDown
.setUp
test2
tearDown
.tearDownClass
(Titik ( .
) adalah unittest
keluaran default ketika sebuah tes berhasil.) Amati setUp
dan tearDown
muncul sebelum dan sesudah test1
dan test2
, sedangkan setUpClass
dan tearDownClass
muncul hanya sekali, di awal dan akhir dari keseluruhan kasus tes.
unittest
jangan anggap tes telah lulus hinggatearDown
selesai tanpa insiden.setUp
dantearDown
masing-masing dijalankan sekali untuk setiaptest
metode (jadi totalnya dua kali dalam contoh ini) tetapisetUpClass
dantearDownClass
dijalankan hanya sekali.Apa perbedaan antara
setUp()
dansetUpClass()
dengan Pythonunittest
kerangka ?Perbedaan utama (seperti dicatat dalam jawaban oleh Benjamin Hodgson) adalah bahwa
setUpClass
dipanggil hanya sekali dan itu sebelum semua tes, sementarasetUp
dipanggil tepat sebelum setiap tes. (NB: Hal yang sama berlaku untuk metode yang setara dalam framework pengujian xUnit lainnya, bukan hanya Pythonunittest
.)Dari
unittest
dokumentasi :dan:
Mengapa penyiapan ditangani dengan satu metode di atas metode lainnya?
Bagian dari pertanyaan ini belum terjawab. Sesuai komentar saya dalam menanggapi jawaban Gearon, itu
setUp
metode ini dimaksudkan untuk elemen perlengkapan yang umum untuk semua tes (untuk menghindari duplikasi kode itu di setiap tes). Saya menemukan ini sering berguna karena menghapus duplikasi (biasanya) meningkatkan keterbacaan dan mengurangi beban pemeliharaan.The
setUpClass
metode adalah untuk elemen mahal yang Anda lebih suka hanya perlu melakukan sekali, seperti membuka koneksi database, membuka file sementara pada filesystem, memuat shared library untuk pengujian, dll Melakukan hal-hal seperti sebelum setiap tes akan memperlambat rangkaian pengujian terlalu banyak, jadi kami hanya melakukannya sekali sebelum semua pengujian. Ini adalah sedikit penurunan dalam independensi pengujian tetapi pengoptimalan yang diperlukan dalam beberapa situasi. Bisa dibilang, seseorang tidak boleh melakukan hal-hal seperti itu dalam pengujian unit karena biasanya mungkin untuk memalsukan database / filesystem / library / apapun tanpa menggunakan yang asli. Karena itu, saya merasa itusetUpClass
jarang dibutuhkan. Namun, ini berguna saat menguji contoh di atas (atau serupa) menjadi perlu.sumber