Kode yang ditandai @Beforedieksekusi sebelum setiap tes, sementara @BeforeClassdijalankan sekali sebelum seluruh fixture tes. Jika kelas tes Anda memiliki sepuluh tes, @Beforekode akan dieksekusi sepuluh kali, tetapi @BeforeClassakan dieksekusi hanya sekali.
Secara umum, Anda menggunakan @BeforeClassketika beberapa tes perlu berbagi kode pengaturan yang mahal secara komputasi. Membuat koneksi database termasuk dalam kategori ini. Anda dapat memindahkan kode dari @BeforeClasske @Before, tetapi pengujian Anda mungkin memakan waktu lebih lama. Perhatikan bahwa kode yang ditandai @BeforeClassdijalankan sebagai penginisialisasi statis, oleh karena itu kode tersebut akan berjalan sebelum instance kelas dari perlengkapan pengujian Anda dibuat.
Dalam JUnit 5 , tag @BeforeEachdan @BeforeAllmerupakan padanan dari @Beforedan @BeforeClassdi JUnit 4. Nama mereka sedikit lebih menunjukkan kapan mereka berjalan, secara longgar ditafsirkan: 'sebelum setiap tes' dan 'sekali sebelum semua tes'.
Saya hanya akan menambahkan yang @BeforeAllmungkin non-statis dan memanggil setiap menjalankan instance-test baru. Lihat jawaban yang sesuai stackoverflow.com/a/55720750/1477873
Sergey
124
Perbedaan antara masing-masing anotasi adalah:
+-------------------------------------------------------------------------------------------------------+¦Feature¦Junit4¦Junit5¦¦--------------------------------------------------------------------------+--------------+-------------¦¦Execute before all test methods of the class are executed.¦@BeforeClass¦@BeforeAll¦¦Used with static method.¦¦¦¦For example,This method could contain some initialization code ¦¦¦¦-------------------------------------------------------------------------------------------------------¦¦Execute after all test methods in the current class.¦@AfterClass¦@AfterAll¦¦Used with static method.¦¦¦¦For example,This method could contain some cleanup code.¦¦¦¦-------------------------------------------------------------------------------------------------------¦¦Execute before each test method.¦@Before¦@BeforeEach¦¦Used with non-static method.¦¦¦¦For example, to reinitialize some class attributes used by the methods.¦¦¦¦-------------------------------------------------------------------------------------------------------¦¦Execute after each test method.¦@After¦@AfterEach¦¦Used with non-static method.¦¦¦¦For example, to roll back database modifications.¦¦¦+-------------------------------------------------------------------------------------------------------+
Sebagian besar anotasi di kedua versi itu sama, tetapi sedikit berbeda.
@BeforeAnotasi fungsi akan dieksekusi sebelum masing-masing fungsi tes di kelas memiliki @Testanotasi tetapi fungsi dengan @BeforeClassakan dieksekusi hanya satu kali sebelum semua fungsi tes di kelas.
Demikian pula fungsi dengan @Afteranotasi akan dieksekusi setelah masing-masing fungsi tes di kelas memiliki @Testanotasi tetapi fungsi dengan @AfterClassakan dieksekusi hanya satu kali setelah semua fungsi tes di kelas.
import org.junit.Assertimport org.junit.Beforeimport org.junit.BeforeClassimport org.junit.TestclassFeatureTest{
companion object {private lateinit var heavyFeature:HeavyFeature@BeforeClass@JvmStatic
fun beforeHeavy(){
heavyFeature =HeavyFeature()}}private lateinit var feature:Feature@Before
fun before(){
feature =Feature()}@Test
fun testCool(){Assert.assertTrue(heavyFeature.cool())Assert.assertTrue(feature.cool())}@Test
fun testWow(){Assert.assertTrue(heavyFeature.wow())Assert.assertTrue(feature.wow())}}
Sama dengan
import org.junit.Assertimport org.junit.TestclassFeatureTest{
companion object {private val heavyFeature =HeavyFeature()}private val feature =Feature()@Test
fun testCool(){Assert.assertTrue(heavyFeature.cool())Assert.assertTrue(feature.cool())}@Test
fun testWow(){Assert.assertTrue(heavyFeature.wow())Assert.assertTrue(feature.wow())}}
@BeforeClas
bersifat statis. Ini berjalan sebelum instance kelas tes dibuat.@BeforeAll
mungkin non-statis dan memanggil setiap menjalankan instance-test baru. Lihat jawaban yang sesuai stackoverflow.com/a/55720750/1477873Perbedaan antara masing-masing anotasi adalah:
Sebagian besar anotasi di kedua versi itu sama, tetapi sedikit berbeda.
Referensi
Perintah Eksekusi.
Kotak putus-putus -> anotasi opsional.
sumber
Sebelum dan SebelumKelas di JUnit
@Before
Anotasi fungsi akan dieksekusi sebelum masing-masing fungsi tes di kelas memiliki@Test
anotasi tetapi fungsi dengan@BeforeClass
akan dieksekusi hanya satu kali sebelum semua fungsi tes di kelas.Demikian pula fungsi dengan
@After
anotasi akan dieksekusi setelah masing-masing fungsi tes di kelas memiliki@Test
anotasi tetapi fungsi dengan@AfterClass
akan dieksekusi hanya satu kali setelah semua fungsi tes di kelas.SampleClass
SampleTest
Keluaran
Di Junit 5
sumber
Sama dengan
sumber