JUnit Tutorial Anotasi dengan Contoh: Apa itu @Test dan @After
โก Ringkasan Cerdas
JUnit Anotasi adalah bentuk metadata sintaksis yang ditambahkan ke Java kode sumber sehingga pelaksana pengujian mengetahui metode mana yang harus dieksekusi, kapan harus menjalankannya, dan berapa lama masing-masing metode akan berlangsung.
Apa itu JUnit Anotasi?
JUnit penjelasan merupakan bentuk khusus dari metadata sintaksis yang dapat ditambahkan ke Java Kode sumber untuk keterbacaan dan struktur kode yang lebih baik. Variabel, parameter, paket, metode, dan kelas dapat diberi anotasi. Anotasi diperkenalkan pada JUnit 4, yang menjadikan Java Kode menjadi lebih mudah dibaca dan disederhanakan. Inilah perbedaan besar antara JUnit 3 dan JUnit 4: JUnit 4 berbasis anotasi.
Dengan pemahaman yang baik tentang anotasi ini, seseorang dapat dengan mudah mempelajari dan mengimplementasikan JUnit tes. Di bawah ini adalah yang penting dan sering digunakan JUnit daftar anotasi, dengan JUnit 5 (Jupiter) yang setara di samping masing-masing:
| S.No. | Penjelasan | Deskripsi | JUnit Setara dengan 5 |
|---|---|---|---|
| 1. | @Uji | Anotasi ini merupakan pengganti dari junit.framework.TestCase, dan menunjukkan bahwa metode void publik yang dilampirkan padanya dapat dieksekusi sebagai kasus uji. | @Test (org.junit.jupiter.api) |
| 2. | @Sebelum | Anotasi ini digunakan jika Anda ingin menjalankan beberapa pernyataan seperti prasyarat sebelum setiap kasus uji. | @SebelumSetiap |
| 3. | @Sebelum kelas | Anotasi ini digunakan jika Anda ingin mengeksekusi beberapa pernyataan sebelum semua kasus uji, misalnya koneksi uji yang harus dibuka sebelum semua kasus uji. | @SebelumSemua |
| 4. | @Setelah | Anotasi ini dapat digunakan jika Anda ingin mengeksekusi beberapa pernyataan setelahnya Uji Kasusmisalnya mengatur ulang variabel atau menghapus file sementara. | @SetelahSetiap |
| 5. | @Afterlass | Anotasi ini dapat digunakan jika Anda ingin mengeksekusi beberapa pernyataan setelah semua kasus uji, misalnya melepaskan sumber daya setelah mengeksekusi semua kasus uji. | @SetelahSemua |
| 6. | @Mengabaikan | Anotasi ini dapat digunakan jika Anda ingin mengabaikan beberapa pernyataan selama eksekusi pengujian, misalnya menonaktifkan beberapa kasus uji selama eksekusi pengujian. | @Dengan disabilitas |
| 7. | @Tes(batas waktu=500) | Anotasi ini dapat digunakan jika Anda ingin menetapkan batas waktu selama eksekusi pengujian, misalnya jika Anda bekerja di bawah SLA (perjanjian tingkat layanan) dan pengujian perlu diselesaikan dalam waktu yang ditentukan. | @Timeout atau assertTimeout |
| 8. | @Test(diharapkan=IllegalArgumentException.kelas) | Anotasi ini dapat digunakan jika Anda ingin menangani pengecualian tertentu selama eksekusi pengujian. Misalnya, jika Anda ingin memeriksa apakah metode tertentu melempar pengecualian tertentu atau tidak. | assertThrows |
JUnit Contoh Anotasi
Mari kita buat kelas yang membahas hal-hal penting JUnit anotasi dengan pernyataan print sederhana dan jalankan dengan kelas test runner:
Langkah 1) Pertimbangkan hal-hal berikut ini Java Kelas yang memiliki berbagai metode yang terhubung dengan anotasi yang tercantum di atas:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Langkah 2) Mari kita buat kelas test runner untuk menjalankan pengujian di atas:
TestRunner.java
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Hasil yang diharapkan
- Semua kasus uji akan dieksekusi satu per satu, dan semua pernyataan cetak dapat dilihat di konsol.
- Seperti yang dibahas pada tabel di atas, @Before dan @BeforeClass dalam JUnit [ Metode m2() dan m1() ] akan dieksekusi sebelum setiap kasus uji dan sebelum semua kasus uji.
- Dengan cara yang sama @After dan @AfterClass di JUnit (Metode m4() dan m3()) akan dieksekusi setelah setiap kasus uji dan setelah semua kasus uji secara berturut-turut. @Ignore (metode m6()) akan diperlakukan sebagai mengabaikan pengujian.
Mari kita analisis kasus uji yang digunakan di atas. Java Kelas secara detail:
- Perhatikan metode m5() seperti yang diberikan di bawah ini:
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
Pada metode di atas, saat Anda menambahkan string ke variabel "list":
- daftar.isEmpty() akan mengembalikan salah.
- menegaskanFalse(daftar.isEmpty()) harus kembali benar.
- Hasilnya, kasus uji akan terjadi lulus.
Karena Anda hanya menambahkan satu string ke dalam daftar, ukurannya adalah satu.
- daftar.ukuran() harus mengembalikan nilai integer โ1โ.
- So menegaskanEquals(1, daftar.ukuran()) harus kembali benar.
- Hasilnya, kasus uji akan terjadi lulus.
- Perhatikan metode m7() seperti yang diberikan di bawah ini:
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
Seperti yang dibahas di atas, @Tes(batas waktu = 10) digunakan untuk memberlakukan batas waktu dalam kasus uji. Nilainya dalam milidetik, jadi m7() harus selesai dalam waktu 10 ms.
- Perhatikan metode m8() seperti yang diberikan di bawah ini:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Seperti yang dibahas di atas, @Tes(diharapkan) akan memeriksa pengecualian yang ditentukan selama eksekusinya, sehingga metode m8() akan melempar "No Such Method Exception". Akibatnya, pengujian akan dieksekusi dengan pengecualian.
Catatan akurasi: Fungsi m8() hanya mencetak satu baris, sehingga pengecualian yang dideklarasikan sebenarnya tidak pernah dilemparkan dan JUnit 4 melaporkan pengujian gagal. Sesuaikan tipe yang diharapkan dengan apa yang sebenarnya dilemparkan oleh metode tersebut. JUnit 5 menulis ini dengan assertThrows.
Ketika semua kasus uji dilewati, maka eksekusi pengujian berhasil.
Hasil Aktual
Karena terdapat tiga kasus uji pada contoh di atas, semua kasus uji akan dieksekusi satu per satu. Lihat tangkapan layar konsol di bawah ini:

Lihat pernyataan cetak di bawah ini yang dapat dilihat di konsol:
Menggunakan @BeforeClass , dieksekusi sebelum semua kasus uji
Menggunakan anotasi @Before, dieksekusi sebelum setiap kasus pengujian
Menggunakan @After, dieksekusi setelah setiap kasus uji
Menggunakan anotasi @Before, dieksekusi sebelum setiap kasus pengujian
Menggunakan @Test(timeout), ini dapat digunakan untuk menerapkan batas waktu JUnit4 kasus uji
Menggunakan @After, dieksekusi setelah setiap kasus uji
Menggunakan anotasi @Before, dieksekusi sebelum setiap kasus pengujian
Menggunakan @Test(expected) , ia akan memeriksa pengecualian yang ditentukan selama eksekusinya
Menggunakan @After, dieksekusi setelah setiap kasus uji
Menggunakan @AfterClass, dieksekusi setelah semua kasus uji
JUnit Kelas Tegas
Anotasi menentukan kapan suatu metode dijalankan; metode assert menentukan apakah metode tersebut berhasil atau tidak.
Kelas ini menyediakan sejumlah metode pernyataan (assertion) yang berguna dalam menulis kasus uji. Jika semua pernyataan assert berhasil, hasil pengujian sukses. Jika ada pernyataan assert yang gagal, hasil pengujian gagal. Kelas ini menyediakan metode pernyataan assert yang khusus. JUnit menegaskan Tutorial ini membahas setiap metode secara mendalam.
Seperti yang telah Anda lihat sebelumnya, tabel di bawah ini menjelaskan metode Assert yang penting dan deskripsinya:
| S.No. | metode | Deskripsi |
|---|---|---|
| 1. | void menegaskanEquals (boolean yang diharapkan, boolean aktual) | Fungsi ini memeriksa apakah dua nilai sama, mirip dengan metode equals pada kelas Object. |
| 2. | batal menegaskanFalse(kondisi boolean) | Fungsinya adalah untuk memeriksa apakah suatu kondisi bernilai salah. |
| 3. | void menegaskanNotNull(Objek objek) | Fungsionalitas โassertNotNullโ adalah untuk memeriksa apakah suatu objek bukan null. |
| 4. | void menegaskanNull(Objek objek) | Fungsionalitas โassertNullโ adalah untuk memeriksa apakah suatu objek adalah null. |
| 5. | batal menegaskanTrue(kondisi boolean) | Fungsi โassertTrueโ adalah untuk memeriksa apakah suatu kondisi benar. |
| 6. | batal gagal() | Jika Anda ingin melempar kesalahan pernyataan (assertion error), fail() selalu menghasilkan putusan gagal (fail). |
| 7. | void menegaskanSame([String pesan] | Fungsionalitas โassertSameโ adalah untuk memeriksa apakah kedua objek merujuk ke objek yang sama. |
| 8. | void menegaskanNotSame([String pesan] | Fungsionalitas โassertNotSameโ adalah untuk memeriksa bahwa kedua objek tidak merujuk ke objek yang sama. |
JUnit Kelas Kasus Uji
Untuk menjalankan beberapa pengujian, kelas TestCase tersedia di kerangka kerja junit paket. Anotasi @Test memberi tahu JUnit bahwa metode public void ini (sebagai contoh kasus uji) yang terlampir padanya dapat dijalankan sebagai kasus uji.
Catatan versi: Kasus cobaan, Hasil tes ke TestSuite menjadi bagian dari warisan kerangka kerja junit paket dari JUnit 3. Tes-tes tersebut masih disertakan dalam artefak JUnit 4.x, tetapi tes berbasis anotasi tidak memperluas TestCase.
Tabel di bawah ini menunjukkan beberapa metode penting yang tersedia di junit.framework.TestCase kelas:
| S.No. | metode | Deskripsi |
|---|---|---|
| 1. | int hitunganKasusUji() | Metode ini digunakan untuk menghitung berapa banyak kasus uji yang dieksekusi oleh lari (Hasil Tes tr) Metode. |
| 2. | Hasil Tes buatHasil() | Metode ini digunakan untuk membuat a Hasil tes obyek. |
| 3. | String getName () | Metode ini mengembalikan string yang tidak lain hanyalah a Kasus cobaan Nama. |
| 4. | Jalankan Hasil Tes() | Metode ini digunakan untuk menjalankan pengujian, yang mengembalikan sebuah Hasil tes obyek. |
| 5. | batal dijalankan (hasil Tes) | Metode ini digunakan untuk menjalankan tes yang memiliki a Hasil tes objek, yang tidak mengembalikan apa pun. |
| 6. | void setName (Nama string) | Metode ini digunakan untuk mengatur nama sebuah Kasus cobaan. |
| 7. | batalkan pengaturan() | Metode ini digunakan untuk menulis kode asosiasi sumber daya, misalnya membuat koneksi basis data. |
| 8. | batalkan pembongkaran() | Metode ini digunakan untuk menulis kode pelepasan sumber daya, misalnya melepaskan koneksi basis data setelah melakukan operasi transaksi. |
JUnit Kelas Hasil Tes
Saat Anda menjalankan pengujian, pengujian tersebut akan mengembalikan hasil (dalam bentuk Hasil tes (objek). Objek TestResult ini dapat digunakan untuk menganalisis objek hasil. Hasil pengujian ini bisa berupa kegagalan atau keberhasilan.
Lihat tabel di bawah ini untuk metode-metode penting yang digunakan dalam kelas junit.framework.TestResult:
| S.No. | metode | Deskripsi |
|---|---|---|
| 1. | void addError(Uji uji, T yang dapat dilempar) | Metode ini digunakan jika Anda perlu menambahkan kesalahan pada pengujian. |
| 2. | void addFailure(Uji uji, AssertionFailedError t) | Metode ini digunakan jika Anda perlu menambahkan kegagalan ke daftar kegagalan. |
| 3. | void endTest(Tes tes) | Metode ini digunakan untuk memberitahukan bahwa suatu pengujian telah dilakukan (selesai). |
| 4. | int jumlah kesalahan() | Metode ini digunakan untuk mendapatkan kesalahan yang terdeteksi selama eksekusi pengujian. |
| 5. | Pencacahan kesalahan() | Metode ini hanya mengembalikan kumpulan (dalam hal ini sebuah Enumerasi) kesalahan. |
| 6. | int jumlah kegagalan() | Metode ini digunakan untuk mendapatkan jumlah kegagalan yang terdeteksi selama eksekusi pengujian. |
| 7. | batal dijalankan (tes TestCase) | Metode ini digunakan untuk mengeksekusi kasus uji. |
| 8. | ke dalam runCount() | Metode ini hanya menghitung jumlah tes yang dijalankan. |
| 9. | batalkan startTest(Tes tes) | Metode ini digunakan untuk memberitahukan bahwa tes dimulai. |
| 10. | batal berhenti() | Metode ini digunakan untuk menghentikan jalankan pengujian. |
JUnit Kelas Rangkaian Tes
Jika Anda ingin menjalankan beberapa pengujian dalam urutan tertentu, hal itu dapat dilakukan dengan menggabungkan semua pengujian di satu tempat. Tempat ini disebut rangkaian pengujian (test suite), dan JUnit rangkaian pengujian Tutorial ini menjelaskan contoh lengkapnya.
Lihat tabel di bawah ini untuk metode-metode penting yang digunakan dalam junit.framework.TestSuite kelas:
| S.No. | metode | Deskripsi |
|---|---|---|
| 1. | batal addTest(Tes tes) | Metode ini digunakan jika Anda ingin menambahkan tes ke suite. |
| 2. | batal addTestSuite(Kelas kelas tes) | Metode ini digunakan jika Anda ingin menentukan kelas sambil menambahkan tes ke suite. |
| 3. | int hitunganKasusUji() | Cara ini digunakan jika ingin menghitung jumlah kasus uji. |
| 4. | String getName () | Metode ini digunakan untuk mendapatkan nama test suite. |
| 5. | batal dijalankan (hasil Tes) | Metode ini digunakan untuk menjalankan pengujian dan mengumpulkan hasil pengujian dalam sebuah Hasil tes obyek. |
| 6. | void setName (Nama string) | Metode ini digunakan untuk mengatur nama dari TestSuite. |
| 7. | Uji testAt(indeks int) | Metode ini digunakan jika Anda ingin mengembalikan hasil pengujian pada indeks tertentu. |
| 8. | ke dalam jumlah tes() | Metode ini digunakan jika Anda ingin mengembalikan jumlah pengujian dalam rangkaian pengujian. |
| 9. | peringatan Tes statis (Pesan string) | Metode ini mengembalikan pengujian yang gagal dan mencatat pesan peringatan. |
