Saat Anda menulis unit test suite, mungkin ada beberapa aktivitas yang tidak terkait dengan pengujian yang perlu Anda lakukan. Kegiatan ini bisa berbentuk apa saja. Anda mungkin perlu menyambungkan ke database atau mengumpulkan sumber daya sebelum melakukan pengujian. Setelah setiap kasus pengujian dijalankan, Anda mungkin perlu melepaskan beberapa sumber daya.
Melakukan salah satu aktivitas yang tidak terkait dengan tes ini di luar ruang lingkup kelas tes unit mungkin membosankan jika bukan tidak mungkin. Keberhasilan eksekusi kelas pengujian Anda mungkin bergantung pada aktivitas ini, jadi JUnit menyediakan dua pasang anotasi untuk mengatasi masalah ini.
Anotasi @SebelumSemua
Kelas pengujian JUnit dapat memiliki satu atau beberapa metode pengujian. Anotasi @BeforeAll memberi sinyal bahwa metode tertentu harus dijalankan sebelum semua metode pengujian di kelas pengujian. Metode yang terkait dengan anotasi ini hanya dijalankan sekali (di awal pengujian) terlepas dari jumlah metode pengujian di kelas pengujian.
Metode apa pun yang menggunakan anotasi @BeforeAll harus mengikuti beberapa ketentuan. Metode ini harus memiliki tipe pengembalian batal, harus publik, dan tidak boleh pribadi. Anotasi @BeforeAll sangat ideal untuk membuat a koneksi ke database atau membuat file baru. Artikel ini menggunakan kelas pengujian kalkulator untuk menunjukkan bagaimana Anda dapat menggunakan anotasi @BeforeAll.
Kelas Kalkulator
kemasan com.aplikasi;
publikkelasKalkulator{
publikstatiske dalammenambahkan(ke dalam nomor1, ke dalam nomor2){
kembali angka1 + angka2;
}
publikstatiske dalammengurangi(ke dalam nomor1, ke dalam nomor2){
kembali angka1 - angka2;
}
publikstatiske dalamberkembang biak(ke dalam nomor1, ke dalam nomor2){
kembali angka1 * angka2;
}
publikstatiske dalammembagi(ke dalam nomor1, ke dalam nomor2){
kembali angka1 / angka2;
}
}
Kelas Tes Kalkulator
imporstatisorganisasi.junit.Jupiter.api.Pernyataan.*;
impororganisasi.junit.Jupiter.api.Sebelum semua;
impororganisasi.junit.Jupiter.api.Uji;
impororganisasi.junit.Jupiter.api.Nama tampilan;@DisplayName("Test class yang mendemonstrasikan bagaimana caranya menggunakan itu sebelumdansetelah anotasi.")
kelasKalkulatorTes{
@Sebelum semua
publikstatisruang kosongpowerOnCalculator(){
System.out.println("Kalkulator menyala");
}@Uji
@Nama tampilan("Metode pengujian yang menambahkan dua nilai integer.")
publikruang kosongtesTambahkan(){
tegaskan sama dengan(7, Kalkulator.menambahkan(3, 4));
}@Uji
@Nama tampilan("Metode pengujian yang mengurangi satu nilai integer dari yang lain.")
publikruang kosongtesKurangi(){
tegaskan sama dengan(6, Kalkulator.mengurangi(9, 3));
}@Uji
@Nama tampilan("Metode pengujian yang mengalikan dua nilai integer")
publikruang kosongtesMultiply(){
tegaskan sama dengan(10, Kalkulator.berkembang biak(5, 2));
}
@Uji
@Nama tampilan("Metode pengujian yang membagi satu nilai integer dengan yang lain")
publikruang kosongtestDivid(){
tegaskan sama dengan(2, Kalkulator.membagi(4, 2));
}
}
Di kelas ini, anotasi @BeforeAll bekerja dengan metode powerOnCalculator(), yang mencetak "Kalkulator aktif" sebelum uji coba apa pun. Eksekusi pengujian yang berhasil mencetak laporan pengujian berikut:
Seperti yang Anda lihat, metode yang terkait dengan anotasi @BeforeAll tidak muncul dalam laporan pengujian. Namun, jika ada kesalahan dalam metode anotasi @BeforeAll, hasil laporan pengujian akan menunjukkan kesalahan ini.
Anotasi @BeforeEach
Seperti metode beranotasi @BeforeAll, metode beranotasi @BeforeEach tidak akan muncul dalam laporan pengujian. Metode beranotasi @BeforeEach dijalankan sebelum setiap metode pengujian di kelas pengujian. Jadi, jika kelas pengujian berisi dua metode pengujian, maka anotasi @BeforeEach akan dijalankan dua kali.
imporstatisorganisasi.junit.Jupiter.api.Pernyataan.*;
impororganisasi.junit.Jupiter.api.Sebelum semua;
impororganisasi.junit.Jupiter.api.Sebelum Setiap;
impororganisasi.junit.Jupiter.api.Uji;
@DisplayName("Test class yang mendemonstrasikan bagaimana caranya menggunakan itu sebelumdansetelah anotasi.")
kelasKalkulatorTes{
@Sebelum semua
publikstatisruang kosongpowerOnCalculator(){
System.out.println("Kalkulator menyala");
}
@SebelumSetiap
publikruang kosonghapus Kalkulator(){
System.out.println("Kalkulator sudah siap");
}
@Uji
@Nama tampilan("Metode pengujian yang menambahkan dua nilai integer.")
publikruang kosongtesTambahkan(){
tegaskan sama dengan(7, Kalkulator.menambahkan(3, 4));
}
@Uji
@Nama tampilan("Metode pengujian yang mengurangi satu nilai integer dari yang lain.")
publikruang kosongtesKurangi(){
tegaskan sama dengan(6, Kalkulator.mengurangi(9, 3));
}
@Uji
@Nama tampilan("Metode pengujian yang mengalikan dua nilai integer")
publikruang kosongtesMultiply(){
tegaskan sama dengan(10, Kalkulator.berkembang biak(5, 2));
}
@Uji
@Nama tampilan("Metode pengujian yang membagi satu nilai integer dengan yang lain")
publikruang kosongtestDivid(){
tegaskan sama dengan(2, Kalkulator.membagi(4, 2));
}
}
Menambahkan anotasi @BeforeEach ke kelas CalculatorTest menghasilkan output berikut:
Metode yang terkait dengan anotasi @BeforeEach dijalankan empat kali, satu kali sebelum setiap metode pengujian. Anda harus mencatat bahwa metode @BeforeEach tidak statis, memiliki tipe pengembalian batal, dan tidak pribadi, karena ini adalah ketentuan wajib. Penting juga untuk dicatat bahwa metode yang terkait dengan anotasi @BeforeEach berjalan setelah metode @BeforeAll.
Anotasi @AfterAll
Metode dengan Anotasi @AfterAll akan dijalankan setelah semua metode pengujian di kelas pengujian menyelesaikan eksekusinya. Anotasi @AfterAll sangat ideal untuk operasi file dasar, seperti menutup file, atau memutuskan sambungan dari database. Anotasi @AfterAll adalah padanan dari anotasi @BeforeAll. Seperti anotasi @BeforeAll, anotasi @AfterAll harus statis, harus mengembalikan void, dan banyak yang tidak bersifat pribadi.
@Lagipula
publikstatisruang kosongpowerOffCalculator(){
System.out.println("Kalkulator mati");
}
Menambahkan metode beranotasi @AfterAll ke kelas CalculatorTest yang ada akan mencetak output berikut ke konsol:
Perhatikan bahwa metode powerOffCalculator(), yang menggunakan anotasi @AfterAll, dicetak di akhir kelas pengujian, setelah semua metode pengujian dijalankan.
Anotasi @AfterEach
Anotasi @AfterEach adalah padanan dari anotasi @BeforeEach. Mereka memiliki ketentuan wajib yang sama, yang sedikit berbeda dari anotasi @BeforeAll dan @AfterAll. Yang membedakan anotasi @AfterEach dari anotasi @BeforeEach (selain namanya) adalah bahwa metode @AfterEach berjalan setelah setiap metode pengujian.
@AfterEach
publikruang kosongkembaliHasil(){
System.out.println("Hasilnya sudah siap");
}
Menjalankan kelas CalculatorTest mencetak output berikut ke konsol:
Outputnya menunjukkan bahwa metode yang terkait dengan anotasi @AfterEach (returnResults) dicetak empat kali. Setiap eksekusi metode returnResults() hanya terjadi setelah eksekusi setiap unit test. Ini terbukti dengan fakta bahwa output metode returnResults() muncul setelah setiap output dari metode yang terkait dengan anotasi @BeforeEach.
Poles Test Suite Anda Menggunakan Anotasi
JUnit memungkinkan Anda untuk menangani proses terkait non-pengujian menggunakan anotasi pasangan sebelum dan sesudah. Keempat anotasi ini termasuk dalam daftar beberapa anotasi lain yang menambah nilai pada pengujian Anda. Anotasi JUnit lainnya adalah @DisplayName.
Dua contoh kode yang menampilkan kelas CalculatorTest lengkap menggunakan anotasi @DisplayName. Anotasi @DisplayName membantu Anda membuat nama yang lebih bermakna untuk kelas pengujian dan metode pengujian Anda.