Jelaskan metode Python "setUp" dan "tearDown" yang digunakan dalam kasus pengujian


96

Adakah yang bisa menjelaskan penggunaan Python setUpdan tearDownmetode saat menulis kasus uji selain yang setUpdipanggil segera sebelum memanggil metode uji dan tearDowndipanggil segera setelah dipanggil?

Jawaban:


87

Secara umum, Anda menambahkan semua langkah prasyarat untuk menyiapkan dan semua langkah pembersihan ke tearDown.

Anda dapat membaca lebih banyak dengan contoh di sini .

Saat metode setUp () ditentukan, runner pengujian akan menjalankan metode tersebut sebelum setiap pengujian. Demikian pula, jika metode tearDown () ditentukan, runner pengujian akan memanggil metode tersebut setelah setiap pengujian.

Misalnya Anda memiliki pengujian yang mengharuskan item ada, atau status tertentu - jadi Anda menempatkan tindakan ini (membuat instance objek, menginisialisasi db, menyiapkan aturan, dan sebagainya) ke dalam penyiapan.

Juga seperti yang Anda ketahui, setiap pengujian harus berhenti di tempat dimulainya - ini berarti bahwa kita harus memulihkan status aplikasi ke status awalnya - misalnya menutup file, koneksi, menghapus item yang baru dibuat, memanggil callback transaksi, dan sebagainya - semua ini langkah-langkah harus dimasukkan ke dalam tearDown.

Jadi idenya adalah bahwa pengujian itu sendiri harus berisi hanya tindakan yang akan dilakukan pada objek pengujian untuk mendapatkan hasilnya, sedangkan setUp dan tearDown adalah metode untuk membantu Anda membiarkan kode pengujian tetap bersih dan fleksibel.

Anda dapat membuat setUp dan tearDown untuk sekumpulan pengujian dan menentukannya di kelas induk - sehingga Anda dapat dengan mudah mendukung pengujian tersebut dan memperbarui persiapan dan pembersihan umum.

Jika Anda mencari contoh yang mudah, silakan gunakan tautan berikut dengan contoh


57

Anda dapat menggunakan ini untuk memfaktorkan keluar kode yang umum untuk semua pengujian dalam rangkaian pengujian.

Jika Anda memiliki banyak kode berulang dalam pengujian Anda, Anda dapat membuatnya lebih pendek dengan memindahkan kode ini ke setUp / tearDown.

Anda dapat menggunakan ini untuk membuat data uji (mis. Menyiapkan palsu / tiruan), atau mematikan fungsi dengan yang palsu.

Jika Anda melakukan pengujian integrasi, Anda dapat menggunakan periksa prasyarat lingkungan di penyiapan, dan lewati pengujian jika ada yang tidak disiapkan dengan benar.

Sebagai contoh:

class TurretTest(unittest.TestCase):

    def setUp(self):
        self.turret_factory = TurretFactory()
        self.turret = self.turret_factory.CreateTurret()

    def test_turret_is_on_by_default(self):
        self.assertEquals(True, self.turret.is_on())

    def test_turret_turns_can_be_turned_off(self):
        self.turret.turn_off()
        self.assertEquals(False, self.turret.is_on())

17
1 karena hanya 9 baris kode yang saya butuhkan untuk mendapatkan 100%. Elegan, contoh ringkas. Sejujurnya, 9 baris itu adalah satu-satunya hal yang saya baca di halaman selain pertanyaan, yang juga merupakan pertanyaan saya. Apakah Anda mengatakan sesuatu dalam bahasa Inggris sebelum contoh kode? Itu tidak dibutuhkan! Kode mengatakan semuanya! Terima kasih Matt.
Nathan C. Tresch

3
Saya tidak mengerti bagaimana "lewati pengujian jika ada sesuatu yang tidak diatur dengan benar" yang ditunjukkan di sini. Atau itu hanya sebuah tambahan?
user5359531

6

Misalkan Anda memiliki suite dengan 10 tes. 8 dari pengujian berbagi kode penyiapan / pembongkaran yang sama. 2 lainnya tidak.

penyiapan dan pembongkaran memberi Anda cara yang bagus untuk memfaktorkan ulang 8 pengujian tersebut. Sekarang apa yang Anda lakukan dengan 2 tes lainnya? Anda akan memindahkannya ke kotak percobaan / suite lain. Jadi, menggunakan penyiapan dan pembongkaran juga membantu memberikan cara alami untuk memecah pengujian menjadi kasus / suite


1
Terkadang tidak diinginkan untuk memindahkan tes ke kasus tes lain. Dalam hal ini Anda dapat menulis dekorator dengan kode penyiapan / pembongkaran dan hanya menghias fungsi uji yang diinginkan.
Matthijs

2
Ini sama sekali bukan jawaban atas pertanyaan itu.
Tuan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.