Apa perbedaan antara setUp()
dan setUpClass()
dengan Pythonunittest
kerangka ?
Perbedaan utama (seperti dicatat dalam jawaban oleh Benjamin Hodgson) adalah bahwa setUpClass
dipanggil hanya sekali dan itu sebelum semua tes, sementara setUp
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 :
setUpClass()
Metode kelas yang dipanggil sebelum pengujian di kelas individu dijalankan. setUpClass dipanggil dengan kelas sebagai satu-satunya argumen dan harus didekorasi sebagai classmethod ():
@classmethod
def setUpClass(cls):
...
dan:
setUp()
Metode dipanggil untuk mempersiapkan perlengkapan tes. Ini dipanggil segera sebelum memanggil metode pengujian; selain AssertionError atau SkipTest, setiap pengecualian yang dimunculkan oleh metode ini akan dianggap sebagai kesalahan daripada kegagalan pengujian. Implementasi default tidak melakukan apa pun.
Mengapa penyiapan ditangani dengan satu metode di atas metode lainnya?
Bagian dari pertanyaan ini belum terjawab. Sesuai komentar saya dalam menanggapi jawaban Gearon, itusetUp
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 itu setUpClass
jarang dibutuhkan. Namun, ini berguna saat menguji contoh di atas (atau serupa) menjadi perlu.