Perbedaan antara setUp () dan setUpBeforeClass ()

159

Saat pengujian unit dengan JUnit, ada dua metode serupa, setUp()dan setUpBeforeClass(). Apa perbedaan antara metode ini? Juga, apa perbedaan antara tearDown()dan tearDownAfterClass()?

Berikut adalah tanda tangannya:

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}
Sagar Varpe
sumber

Jawaban:

204

Metode @BeforeClassdan @AfterClassberanotasi akan dijalankan tepat satu kali selama uji coba Anda - di awal dan akhir tes secara keseluruhan, sebelum hal lain dijalankan. Bahkan, mereka dijalankan sebelum kelas tes bahkan dibangun, itulah sebabnya mereka harus dinyatakan static.

Metode @Beforedan @Afterakan dijalankan sebelum dan sesudah setiap uji kasus, jadi mungkin akan dijalankan beberapa kali selama uji coba.

Jadi mari kita asumsikan Anda memiliki tiga tes di kelas Anda, urutan pemanggilan metode adalah:

setUpBeforeClass()

  (Test class first instance constructed and the following methods called on it)
    setUp()
    test1()
    tearDown()

  (Test class second instance constructed and the following methods called on it)
    setUp()
    test2()
    tearDown()

  (Test class third instance constructed and the following methods called on it)
    setUp()
    test3()
    tearDown()

tearDownAfterClass()
Andrzej Doyle
sumber
15

Pikirkan "BeforeClass" sebagai penginisialisasi statis untuk kasus uji Anda - gunakan untuk menginisialisasi data statis - hal-hal yang tidak berubah di seluruh kasus pengujian Anda. Anda pasti ingin berhati-hati tentang sumber daya statis yang tidak aman.

Terakhir, gunakan metode beranotasi "AfterClass" untuk membersihkan pengaturan apa pun yang Anda lakukan dalam metode beranotasi "BeforeClass" (kecuali jika penghancuran diri mereka cukup baik).

"Sebelum" & "Setelah" adalah untuk inisialisasi khusus unit test. Saya biasanya menggunakan metode ini untuk menginisialisasi / menginisialisasi ulang mengejek dependensi saya. Jelas, inisialisasi ini tidak khusus untuk tes unit, tetapi umum untuk semua tes unit.

madhurtanwani
sumber
BTW jika Anda mulai menulis unit test saya akan merekomendasikan pot ini dari blog saya. Ini memiliki petunjuk ke materi hebat lainnya pada unit testing juga: madhurtanwani.blogspot.com/search/label/mock
madhurtanwani
7

setUpBeforeClass dijalankan sebelum eksekusi metode apa pun tepat setelah konstruktor (jalankan hanya sekali)

setUp dijalankan sebelum setiap eksekusi metode

tearDown dijalankan setelah setiap eksekusi metode

tearDownAfterClass dijalankan setelah semua eksekusi metode lainnya, adalah metode terakhir yang akan dieksekusi. (jalankan hanya sekali dekonstruktor)

netbrain
sumber
5

Dari Javadoc :

Terkadang beberapa tes perlu berbagi pengaturan yang mahal secara komputasi (seperti masuk ke database). Meskipun hal ini dapat membahayakan independensi tes, terkadang ini merupakan optimasi yang diperlukan. Membuat anotasi metode public static voidno-arg dengan @BeforeClassmembuatnya dijalankan sekali sebelum salah satu metode pengujian di kelas. The @BeforeClassmetode superclasses akan dijalankan sebelum mereka kelas saat ini.

Justin King
sumber
Perbedaannya adalah setUpBeforeClass dijalankan sebelum pengujian dan dijalankan sekali; setUp dijalankan sekali sebelum setiap pengujian (dan biasanya digunakan untuk mengatur ulang kondisi pengujian ke nilai yang diketahui baik di antara pengujian).
Sintaks